Page 1 sur 1
[SQL] Combien d'imbrication dans les requêtes ?
Posté : 04 oct. 2005, 15:37
par mere-teresa
Ce n'est pas MySQL mais SQL Server.
Je souhaite faire une requête comme ceci :
INSERT INTO table1 (nom, prenom, id_table2, id_table5)
SELECT data5 FROM table5 WHERE data3-1
= (SELECT data3 FROM table3 WHERE data4 = $mavariable)
Pour avoir l'id_table2, c'est facile, car c'est l'insertion précédente que je viens de faire. Mais pour id_table5 c'est plus compliqué....
Posté : 04 oct. 2005, 15:42
par Cyrano
Je ne me souviens pas d'une limite aux imbrications, en revanche, il me semble que ce n'est pas WHERE x = (SELECT etc...) mais WHERE x IN (SELECT etc...)
Sous réserve quand même, à vérifier, je cherche dans ma littérature au cas ou je trouverais autre chose.
Posté : 04 oct. 2005, 15:43
par zeus
Même chose que Cyrano, IN à la place de =
Question profondeur, je sais que j'ai déjà fait 6 niveaux mais je ne sais pas si il y une limite
Posté : 04 oct. 2005, 15:48
par mere-teresa
En fait, je veux faire cela (je suis en train de rédiger le truc) et c'est dans une transaction 
INSERT INTO table1 (nom, prenom, id_table2, id_table5)
VALUES
('blabla', 'bloblo', 456,
SELECT data5 FROM table5 WHERE data3-1
IN (SELECT data3 FROM table3 WHERE data4 = $mavariable)
)
Posté : 04 oct. 2005, 15:51
par zeus
Je suis pas sûr que ça fonctionne bien le SELECT dans une liste de valeur

Posté : 04 oct. 2005, 15:52
par mere-teresa
Je dois faire INSERT par INSERT alors ?
Posté : 04 oct. 2005, 15:58
par zeus
Avant de répondre à ta question, je voudrais savoir si les 3 1ers champs contiennent tjs les mêmes valeurs ou non.
Parce ce que je comprend de la requête affichée, c'est que tu veut prendre blabla, bloblo et 456 pour les 3 1er champ et le résultat de la sous requete pour le 4eme champ
Posté : 04 oct. 2005, 16:03
par mere-teresa
C'est pire que cela, mes 2 premiers champs auront les mm valeurs. Enfin, ce sont des variables, mais ce sont des valeurs données.
La 3e valeur est l'id de la requête insérée précédemment.
La 4e valeur ne peut s'obtenir qu'en s'appuyant sur 2 tables.
Posté : 04 oct. 2005, 16:05
par zeus
Code : Tout sélectionner
INSERT INTO table1 (nom, prenom, id_table2, id_table5)
VALUES
( SELECT 'blabla', 'bloblo', 456,
data5 FROM table5 WHERE data3-1
IN (SELECT data3 FROM table3 WHERE data4 = $mavariable)
)
Je verrais plutôt ça mais je pari pas
Il me semble que Oracle reconnait cette écriture, mais je sais pas trop pour SQL Serveur