Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

SQL JOIN muitos para muitos


É possível com este pequeno truque (OUTER JOIN na tabela muitos para muitos, com a restrição de que o GroupID seja 3 (para 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 significa:pegar todas as linhas das tabelas que precederam (as que estão no lado ESQUERDO do LEFT OUTER JOIN , se desejar), mesmo que não haja linhas correspondentes a elas nas tabelas a seguir. A condição ON elements.ID = group_elements.ElementID AND group_elements.GroupID = 3 diz que se encontrarmos algo que corresponda ao nosso ElementID, também deve ser um drama (GroupID =3). Em seguida, fazemos outro LEFT OUTER JOIN na tabela de grupos, o que nos permite exibir a coluna Genre, ou NULL se o elemento não for um drama.