Probleme requete

Résolu
gousalah Messages postés 37 Date d'inscription jeudi 21 septembre 2006 Statut Membre Dernière intervention 23 mars 2010 - 29 juin 2008 à 14:06
Farfadh Messages postés 68 Date d'inscription dimanche 1 avril 2007 Statut Membre Derniè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)

c quoi la  solution svp

4 réponses

Farfadh Messages postés 68 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 7 juillet 2008 4
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.
3
Farfadh Messages postés 68 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 7 juillet 2008 4
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.
3
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
29 juin 2008 à 14:31
Salut,

Si tu est sous mysql, essai de faire comme ça :

SET @query = (SELECT mat_etudiant FROM inscription WHERE code_option=2 AND code_groupe=2);
SELECT * FROM etudiant WHERE mat_etudiant = @query;

a++

Si la réponse vous convient, pensez : Réponse acceptée !
0
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
29 juin 2008 à 17:48
ok, au moins ça a le mérite d'être clair, et moins tu es sincère...

Pour ce qui est de ma requête, j'ai lu dans un tutorial du site du zéro qu'on pouvait mettre un select dans une variable pour après l'utiliser !

a++

Si la réponse vous convient, pensez : Réponse acceptée !
0
Rejoignez-nous