|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||||||
|
Nouveau Membre du Club
![]() Inscription : mai 2005 Messages : 64 ![]() |
Salut tout le monde,
J'ai un problème de requete à base de JOIN que je souhaite élucider, mais je n'y arrive pas. J'ai deux tables, reliées par une table pivot : Code :
Attention c'est là que ca se complique : Je travaille sur les objets. Je souhaite récupérer la liste des objets, et quand il y a une etiquette de type "rouge" sur un objet, je souhaite récupérer l'étiquette. Quand il n'y a pas d'étiquettes, je souhaite récupérer l'objet quand meme. Pour cela je procède de la façon suivante. Code :
Je récupère bien tout ce que je veux, mais si des objets appartiennent à plusieurs labels, rouge ou non, et bien je récupère ces objets mais en de multiples exemplaires ! Je vais donner un exemple pour illustrer : Code :
(j'ai ajouté lalid qui correspond à labels_objects.label_id, pour qu'on pige bien le pb) Code :
Voyez vous une solution, idéalement à placer sur le JOIN, qui me permettrai de résoudre ce problème ? Merci d'avance ! Bonne soirée. Guiz PS : pour les courageux, voici les scripts CREATE afin de reproduire l'exemple. Par souci de simplicité, toutes les relations ne figurent pas. Les inserts sont a faire à la main, mais bon, c'est vraiment pas long. Code :
|
||||||||||
|
|
00
|
|
|
#2 |
![]() ![]() David S.Etudiant en alternance Inscription : août 2010 Messages : 1 167 ![]() |
Bonsoir,
Qu'est ce qui t’empêche de faire un INNER JOIN?
__________________
![]() ![]() ![]() David55 |
|
|
00
|
|
|
#3 |
|
Nouveau Membre du Club
![]() Inscription : mai 2005 Messages : 64 ![]() |
J'ai peur de dire une bêtise là mais un inner join ne va pas me sélectionner les objets qui n'ont aucun label, si ?
|
|
|
00
|
|
|
#4 |
|
Nouveau Membre du Club
![]() Inscription : mai 2005 Messages : 64 ![]() |
Salut,
Je confirme ma réponse d'hier soir, je ne comprends pas comment un INNER JOIN pourrait sélectionner les lignes qui ne remplissent pas forcément la condition. Si tu as une explication n'hésite pas à me la fournir. Néanmoins, merci pour ta réponse. |
|
|
00
|
|
|
#5 | ||
|
Nouveau Membre du Club
![]() Inscription : mai 2005 Messages : 64 ![]() |
Je viens de trouver une solution qui pourrait répondre à mon problème, c'est d'utiliser des subqueries dans le JOIN (c'est peut etre ce que David55 suggérait). Je ne savais même pas que ça se faisait :
Code :
Merci |
||
|
|
10
|
|
|
#6 |
![]() ![]() Inscription : octobre 2008 Messages : 1 508 ![]() |
Tu peux aussi faire:
SELECT des objets ayant un label rouge UNION SELECT des objets n'ayant aucun label Pour les objets n'ayant aucun label, c'est requêtable avec une clause NOT IN, ou bien avec un objects LEFT JOIN label_objects et condition IS NULL sur la colonne de jointure. |
|
|
10
|
|
|
#7 |
|
Nouveau Membre du Club
![]() Inscription : mai 2005 Messages : 64 ![]() |
Finalement je suis très satisfait de ma méthode. Mes requêtes ne sont pas beaucoup plus complexes, et cela fonctionne très bien !
estofilo, ta solution fonctionne, mais m'oblige à taper deux requêtes de sélection. Je préfère donc la mienne. Merci pour vos réponses. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com