Page 1 sur 1

Requête INSERT avec SELECT et autres valeurs.

Posté : 09 nov. 2007, 11:29
par Berzemus
Salut les gars,

je me demandais s'il était possible d'effectuer un insert, mais avec des valeurs de sources diverses (par select et d'autres en dur).

In casu: j'ai une table de 6 champs, les 4 premiers sont récupérés par un select, mais pour les 2 derniers, j'ajoute les valeurs en dur (aucune pour le champ autoincrémenté et un 0 pour un champ bool).

je bute sur la façon d'ajouter les deux dernières valeurs aux valeurs retournées par le select..

J'ai pas encore entièrement intégré la logique SQL, mais voilà ce qui me semble logique:

Code : Tout sélectionner

INSERT INTO jacky (1,2,3,4,5,6) VALUES ((SELECT 1,2,3,4 FROM henri),5,6);
merci.

Posté : 09 nov. 2007, 12:03
par d0m
le meilleur moyen de savoir reste de tenter d'executer la requête...

Posté : 09 nov. 2007, 12:09
par Berzemus
ben..
INSERT INTO jacky( 1, 2, 3, 4, 5,6)
VALUES ((SELECT 1, 2, 3, 4
FROM henri
INNER JOIN souper ON x = y
ORDER BY 2 DESC
LIMIT 1), 5, 6)
me retourne:
#1136 - Column count doesn't match value count at row 1

Re: Requête INSERT avec SELECT et autres valeurs.

Posté : 09 nov. 2007, 12:18
par Hubert Roksor
Voici comment le serveur conçoit la requête

Code : Tout sélectionner

INSERT INTO jacky (col1,col2,col3,col4,col5,col6) VALUES (?,?,?,?,?,?)
Chaque ? peut être remplacé par un nombre, une chaîne, une sous-requêtes, une variable, etc... mais une sous-requête ne pourra pas "prendre le place" de plusieurs ?
Tu peux néanmoins utiliser une variante d'INSERT, INSERT ... SELECT. Là encore, la requête doit correspondre à

Code : Tout sélectionner

INSERT INTO jacky (col1,col2,col3,col4,col5,col6) SELECT ?,?,?,?,?,?
...mais puisque tu peux mélanger colonnes et valeurs "en dur" dans ton SELECT, tu peux arriver à ce que tu cherches, en l'occurence

Code : Tout sélectionner

INSERT INTO jacky (col1,col2,col3,col4,col5,col6) SELECT col1, col2, col3, col4, 5, 6 FROM table

Posté : 09 nov. 2007, 12:27
par Berzemus
wéééééé !!! ça rokse à fond..

merci :agenouille: