Mysql
 sql >> Base de données >  >> RDS >> Mysql

SQL JOIN plusieurs à plusieurs

C'est possible avec cette petite astuce (OUTER JOIN sur la table many-to-many, avec la contrainte que le GroupID doit être 3 (pour Drama)

http://sqlfiddle.com/#!9/01cf3/1

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 :prend toutes les lignes des tables qui précèdent (celles qui sont à GAUCHE du LEFT OUTER JOIN , si vous voulez), même s'il n'y a pas de lignes qui leur correspondent 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, cela doit aussi être un drame (GroupID =3). On fait ensuite un autre LEFT OUTER JOIN sur la table des groupes, ce qui permet d'afficher la colonne Genre, ou NULL si l'élément n'était pas un drame.