gousalah
Messages postés37Date d'inscriptionjeudi 21 septembre 2006StatutMembreDernière intervention23 mars 2010
-
29 juin 2008 à 14:06
Farfadh
Messages postés68Date d'inscriptiondimanche 1 avril 2007StatutMembreDernière intervention 7 juillet 2008
-
29 juin 2008 à 18:21
salut j un probleme avec cette requete elle retourn plusieur ligne mais sa marche pa
select * from etudiant where mat_etudiant=(select mat_etudiant from inscription where code_option=2 and code_groupe=2)
Farfadh
Messages postés68Date d'inscriptiondimanche 1 avril 2007StatutMembreDernière intervention 7 juillet 20084 29 juin 2008 à 17:43
Sans vouloir froisser personne, je trouve les requêtes formulées très maladroites, voire carrément incorrectes :
- une sélection dans une sélection est à utiliser en dernier recours, sinon il faut préférer les jointures
- il est impossible d'affecter à une variable un résultat de sélection qui contient plusieurs lignes, si j'ai bon souvenir
- de plus l'utilisation d'une variable dans la clause WHERE ralenti très fortement MySQL à ce que j'ai entendu
Voila la requête que je préconise :
SELECT etudiant.*
FROM etudiant
LEFT JOIN inscription
ON etudiant.mat_etudiant= incription.mat_etudiant
WHERE incription.code_option = 2AND incription.code_groupe= 2
Sauf erreur de ma part, elle devrait marcher non seulement parfaitement bien, mais permettre à MySQL de bien optimiser le traitement de la sélection.
Farfadh
Messages postés68Date d'inscriptiondimanche 1 avril 2007StatutMembreDernière intervention 7 juillet 20084 29 juin 2008 à 18:21
Oui tu peux y mettre le résultat d'une sélection mais seulement si elle renvoie une valeur unique, sauf si ça fonctionne autrement dans une version que je ne connais pas :
SET@variable= ( SELECT *FROMtable)
#1241 - Operand should contain 1 column(s)
SET@variable = (SELECTidFROMtable)
#1242 - Subquery returns more than 1 row
SET@variable= (SELECTidFROMtableLIMIT1)
Votre requête SQL a été exécutée avec succès (traitement: 0.0002 sec.)
Les variables en SQL, c'est pour faire joujou, parce que ce n'est pas pratique, on ne peut pas y lire et y écrire au sein d'une même instruction, elles sont lentes, elles ne peuvent pas contenir de tableaux et donc pas de sélection de données multiples, et au final mieux vaut stocker le résultat d'une requête dans son script.