Mysql , problème avec NOT IN et NOT EXISTS

Mysql , problème avec NOT IN et NOT EXISTS - Programmation

Marsh Posté le 04-06-2002 à 15:14:54    

'lut !
J'ai un petit (j'espère) problème de sql.
En asp sur mysql, j'ai une table d'élève qui ont en clés étrangère la référence d'une classe.
 
 
Dans un premier temps j'ai recupérer la liste des élèves qui ont une classes...  :)  
 
Maintenant j'aimerais récupérer les élèves qui n'ont pas de classes alors je pensais utiliser NOT IN, ca ne marche pas : :fou:  
 
SELECT ele_ref, ele_prenom, ele_nom
    FROM eleve  
        WHERE ele_actif=1  
        AND ele_ref NOT IN
           ( SELECT ele_ref  
                  FROM eleve, classe  
                       WHERE ele_ref_classe=clas_ref  
                       AND ele_actif=1
            )
 
me renvoit : :cry:  
 
SQLState: 42000
Native Error Code: 1064
[TCX][MyODBC]You have an error in your SQL syntax near 'NOT ( SELECT ele_ref, ele_prenom, ele_nom FROM eleve WHERE ele_actif=1 AND ele_r' at line 1
 
 
Alors j'ai essayé avec NOT EXISTS, ca marche pas non plus...
 
Vous voyez d'ou vient le problème ?...

Reply

Marsh Posté le 04-06-2002 à 15:14:54   

Reply

Marsh Posté le 04-06-2002 à 15:22:48    

Il me semble que MySQL ne gère pas les Select imbriqués (du moins les versions avant la 4 ; pour cette dernière je ne sais pas)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 04-06-2002 à 15:27:57    

antp a écrit a écrit :

Il me semble que MySQL ne gère pas les Select imbriqués (du moins les versions avant la 4 ; pour cette dernière je ne sais pas)  




 
Comment je fais alors ? Quelqu'un a une idée ??? :bounce:

Reply

Marsh Posté le 04-06-2002 à 15:37:48    

jultey a écrit a écrit :

Comment je fais alors ? Quelqu'un a une idée ??? :bounce:


tu lis la doc :D histoire de voir si le select imbriqué a été implémenté.
 
sinon, la solution recommandée est de passer par une table temporaire (encore une fois, mysql.com).

Reply

Marsh Posté le 04-06-2002 à 15:43:17    

youdontcare a écrit a écrit :

tu lis la doc :D histoire de voir si le select imbriqué a été implémenté.
 
sinon, la solution recommandée est de passer par une table temporaire (encore une fois, mysql.com).  




 
Allez, je vais chercher...

Reply

Marsh Posté le 04-06-2002 à 16:14:14    

Reply

Marsh Posté le 04-06-2002 à 16:19:47    

jultey a écrit a écrit :

 
 
Allez, je vais chercher...  




 
merci pour ce lien tres tres tres intéressant !!!  :jap:

Reply

Marsh Posté le 04-06-2002 à 16:25:21    

ca fait partie de la TODO list de MySQL depuis un bail :/


---------------
Narf... It is broken...
Reply

Marsh Posté le 04-06-2002 à 16:45:33    

DLR a écrit a écrit :

ca fait partie de la TODO list de MySQL depuis un bail :/  




 
La TODO ?? C'est quoi ?  
 
 
Pour mon pb de requete, j'essaie avec un join :
 
 
SELECT eleve.ele_ref, eleve.ele_prenom, eleve.ele_nom  
FROM eleve  
WHERE ele_actif=1  
    LEFT JOIN classe  
    ON ele_ref_classe=clas_ref  
    WHERE ele_ref_class IS NULL ;
 
 
Mais j'obtiens une erreur... (j'avais jamais utilisé join avant , soyez indulgent)...
->
Native Error Code: 1064
[TCX][MyODBC]You have an error in your SQL syntax near 'LEFT JOIN classe ON ele_ref_classe=clas_ref WHERE ele_ref_class IS NULL ; ' at line 1
 
 
Si quelqu'un voit rapidement d'ou ca peut venir...

Reply

Marsh Posté le 04-06-2002 à 17:23:30    

jultey a écrit a écrit :

 
La TODO ?? C'est quoi ?  




 
lol
TODO = TO DO = A FAIRE :-)

Reply

Marsh Posté le 04-06-2002 à 17:23:30   

Reply

Marsh Posté le 04-06-2002 à 17:27:14    

jultey a écrit a écrit :

SELECT eleve.ele_ref, eleve.ele_prenom, eleve.ele_nom  
FROM eleve  
WHERE ele_actif=1
    LEFT JOIN classe  
    ON ele_ref_classe=clas_ref  
    WHERE ele_ref_class IS NULL ;



Le WHERE doit aller après le LEFT JOIN
 
SELECT...
FROM...
LEFT JOIN...
WHERE...
 
Edit : en fait, tu dois fusionner les 2 where :
WHERE eleve.ele_actif=1 AND (classe.ele_ref_class IS NULL)


Message édité par mrbebert le 06-04-2002 à 17:29:29
Reply

Marsh Posté le 04-06-2002 à 17:49:07    

mrbebert a écrit a écrit :

Le WHERE doit aller après le LEFT JOIN
 
SELECT...
FROM...
LEFT JOIN...
WHERE...
 
Edit : en fait, tu dois fusionner les 2 where :
WHERE eleve.ele_actif=1 AND (classe.ele_ref_class IS NULL)  




 
OK merci ! Mais en fait, j'ai contourner le problème... Maintenant, y'a plus moyen de supprimer une classe avec un élève dedans... (enfin, j'me comprends, c'est le principal ).
 
En tout cas, merci pour votre aide  ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed