[SQL] Combien d'imbrication dans les requêtes ?

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

04 oct. 2005, 15:37

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é....


Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Mammouth du PHP | 19672 Messages

04 oct. 2005, 15:42

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

04 oct. 2005, 15:43

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
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

04 oct. 2005, 15:48


En fait, je veux faire cela (je suis en train de rédiger le truc) et c'est dans une transaction :D

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)
)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

04 oct. 2005, 15:51

Code : Tout sélectionner

VALUES ('blabla', 'bloblo', 456, SELECT
Je suis pas sûr que ça fonctionne bien le SELECT dans une liste de valeur :-s :-k
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

04 oct. 2005, 15:52

Je dois faire INSERT par INSERT alors ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

04 oct. 2005, 15:58

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
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

04 oct. 2005, 16:03

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.
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

04 oct. 2005, 16:05

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
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer