Exclure enregistrements d'une requête MySQL

Exclure enregistrements d'une requête MySQL - SQL/NoSQL - Programmation

Marsh Posté le 15-08-2012 à 21:32:54    

Hello tous,
J'ai un trou... passager j'espère.
J'aimerais obtenir la liste des items de la table lesson en excluant les items qui sont dans la table lesson_animal (table associative) en fournissant un id_animal.
Si id_animal=2 (truc2) Il faut sortir:
info2 et info4
 
info1 et info3 sont exclus car truc2 en fait déjà partie.
 
lesson(id_lesson,lesson_name)
1 info1
2 info2
3 info3
4 info4
 
lesson_animal(id_lesson,id_animal)
1 2
1 3
2 4
3 2
 
animal(id_animal,animal_name)
1 truc1
2 truc2
3 truc3
4 truc4
 
 
Est-ce clair ?
 
Merci de vos suggestion.


Message édité par polo7 le 16-08-2012 à 21:10:56
Reply

Marsh Posté le 15-08-2012 à 21:32:54   

Reply

Marsh Posté le 16-08-2012 à 19:26:20    

Pas compris comment devaient être sélectionnées/exclues les lignes [:tinostar]  
 
Pour exclure des lignes, tu peux utiliser le "NOT IN"


---------------
Doucement le matin, pas trop vite le soir.
Reply

Marsh Posté le 16-08-2012 à 21:12:15    

OK, j'ai pris un cas et j'ai fait une sous-requête qui fonctionne:
SELECT * FROM lesson WHERE lesson.id_lesson NOT IN (SELECT lesson_animal.id_lesson FROM lesson_animal WHERE lesson_animal.id_animal=$id_animal)
 
Mais il me semble que ce serait plus optimal avec une jointure.

Reply

Marsh Posté le 16-08-2012 à 22:02:58    

Quelque chose dans ce genre :

SELECT *
FROM lesson l
LEFT JOIN lesson_animal l_a ON (l.id_lesson=l_a.id_lesson)
WHERE l_a.id_animal=$id_animal
  AND l_a.id_lesson IS NULL


 
Si des tests montrent de meilleures performances, ça peut être une alternative mais perso, je préfère largement ta requête :)


Message édité par mrbebert le 16-08-2012 à 22:03:18

---------------
Doucement le matin, pas trop vite le soir.
Reply

Sujets relatifs:

Leave a Replay

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