[Résolu]Requete soustractive MySQL ?

Requete soustractive MySQL ? [Résolu] - SQL/NoSQL - Programmation

Marsh Posté le 30-01-2006 à 11:59:18    

Bonjour à tous  :hello: ,
 
J'ai aujourd'hui un souci concernat une requête qui me donne du fil à retordre sous MySQL.
 
Avant tout voici la structure de mes deux tables ( structure qui ne doit pas être modifiée )
TABLE MATIERE
id_matiere
libelle
 
TABLE MATIERE_ELEVE
id_matiere
id_utilisateur
 
Ma requête est la suivante :
 
Je souhaiterais récupérer tous les libellés la table matiere qu'un utilisateur donné n'a pas choisi ( et donc vérifier par rapport à la table matiere_eleve ).
 
Merci par avance


Message édité par TomZ le 30-01-2006 à 12:23:29
Reply

Marsh Posté le 30-01-2006 à 11:59:18   

Reply

Marsh Posté le 30-01-2006 à 12:02:58    

avec une jointure externe tu dois t'en sortir:

Code :
  1. select
  2.    MATIERE.id_matiere
  3. , MATIERE.libelle
  4. from
  5. MATIERE
  6. left outer join MATIERE_ELEVE on ( MATIERE.id_matiere = MATIERE_ELEVE.id_matiere)
  7. where
  8.       MATIERE_ELEVE.id_matiere is null
  9. AND MTIERE_ELEVE.id_utilisateur = XXX

Reply

Marsh Posté le 30-01-2006 à 12:03:33    

select libelle from  MATIERE  
where id_matiere NOT IN (SELECT id_matiere FROM MATIERE_ELEVE where  id_utilisateur = ?);

Reply

Marsh Posté le 30-01-2006 à 12:10:32    

J'avais déjà fait exactement la même requête mais dès que j'ajoute la condition sur l'id_utilisateur à savoir
 

Code :
  1. matiere.id_utilisateur = valeur


la requête s'effectue correctement mais ne renvoie rien. Alors qu'en enlevant le test sur l'id_utilisateur elle renvoie des champs.
 
NB : ma version de MySQL ne permet pas le NOT IN et cette version m'est imposée

Message cité 1 fois
Message édité par TomZ le 30-01-2006 à 12:17:01
Reply

Marsh Posté le 30-01-2006 à 12:19:18    

La requête a été trouve au final
 

Code :
  1. select matiere.id_matiere , matiere.libelle from matiere
  2. left outer join matiere_eleve
  3. on ( matiere.id_matiere = matiere_eleve.id_matiere) AND matiere_eleve.id_utilisateur =valeur
  4. where matiere_eleve.id_matiere is null


 
En fait,  la where est seulement sur id_matiere null  
En condition de jointure je devais rajouter la condition sur l'ID et pas dans le where
 
Merci à tous


Message édité par TomZ le 30-01-2006 à 12:21:33
Reply

Marsh Posté le 30-01-2006 à 12:19:46    

TomZ a écrit :

J'avais déjà fait exactement la même requête mais dès que j'ajoute la condition sur l'id_utilisateur à savoir....


Ouais c'est normal en fait :o
 
Mets la condition sur le id_utilisateur dans le "on" de la jointure

Reply

Marsh Posté le 30-01-2006 à 12:21:53    

Hopla merci trouvé en meme temps :)
Merci de votre aide

Reply

Sujets relatifs:

Leave a Replay

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