Désolé pour le titre minimaliste mais je ne sais pas comment le décrire en bref. J'ai trois tableaux:
La table des groupes
ID | Genre
-----------------
1 | Action
2 | Adventure
3 | Drama
Table plusieurs à plusieurs
GroupID | ElementID
-----------------
3 | 1
1 | 2
2 | 2
2 | 3
3 | 3
Et la table des éléments
ID | Element
-----------------
1 | Pride and Prejudice
2 | Alice in Wonderland
3 | Curious Incident Of A Dog In The Night Time
Tout va bien et très simple. Le SELECT que j'essaie d'atteindre est le suivant
ID | Element | Genre
-------------------------------------------------------------
1 | Pride and Prejudice | Drama
2 | Alice in Wonderland | NULL
3 | Curious Incident Of A Dog In The Night Time | Drama
Je souhaite sélectionner tous les éléments du tableau Éléments et définir le champ genre sur Drame ou null.
J'essaie de le faire dans MySQL.
Merci d'avance
C'est possible avec cette petite astuce (OUTER JOIN sur la table plusieurs-à-plusieurs, avec la contrainte que le GroupID doit être 3 (pour Drama)
http://sqlfiddle.com/#!2/b7c18/2
SELECT elements.ID, elements.Element, groups.Genre
FROM elements
LEFT OUTER JOIN group_elements
ON elements.ID = group_elements.ElementID
AND group_elements.GroupID = 3
LEFT OUTER JOIN groups
ON group_elements.GroupID = groups.ID
LEFT OUTER JOIN
signifie: prendre toutes les lignes des tableaux qui ont précédé (celles qui se trouvent du côté GAUCHE du LEFT OUTER JOIN
, si vous voulez), même si aucune ligne ne leur correspond dans les tableaux suivants. La condition ON elements.ID = group_elements.ElementID AND group_elements.GroupID = 3
dit que si nous trouvons quelque chose qui correspond à notre ElementID, ce doit aussi être un drame (GroupID = 3). Nous faisons ensuite une autre LEFT OUTER JOIN sur la table des groupes, ce qui nous permet d'afficher la colonne Genre, ou NULL si l'élément n'était pas un drame.