mysql - tablas - SQL JOIN muchos a muchos
optimizar inner join sql server (1)
Es posible con este pequeño truco (OUTER JOIN en la tabla de muchos a muchos, con la restricción de que GroupID tiene que ser 3 (para 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
significa: tome todas las líneas de las tablas anteriores (las que están en el lado IZQUIERDA de la LEFT OUTER JOIN
, si así lo desea), incluso si no hay líneas correspondientes en las siguientes tablas. La condición ON elements.ID = group_elements.ElementID AND group_elements.GroupID = 3
dice que si encontramos algo que coincida con nuestro ElementID, también debe ser un drama (GroupID = 3). Luego hacemos otra IZQUIERDA EXTERIOR IZQUIERDA en la tabla de grupos, que nos permite mostrar la columna Género, o NULL si el elemento no fue un drama.
Lo siento por el título minimalista, pero no sé cómo describirlo en breve. Tengo tres mesas:
La tabla de grupos
ID | Genre
-----------------
1 | Action
2 | Adventure
3 | Drama
Muchos a muchos mesa
GroupID | ElementID
-----------------
3 | 1
1 | 2
2 | 2
2 | 3
3 | 3
Y la tabla de elementos.
ID | Element
-----------------
1 | Pride and Prejudice
2 | Alice in Wonderland
3 | Curious Incident Of A Dog In The Night Time
Todo está bien y muy simple. El SELECTO que estoy tratando de lograr es el siguiente
ID | Element | Genre
-------------------------------------------------------------
1 | Pride and Prejudice | Drama
2 | Alice in Wonderland | NULL
3 | Curious Incident Of A Dog In The Night Time | Drama
Quiero seleccionar todos los elementos de la tabla Elementos y configurar el campo de género en Drama o nulo .
Estoy tratando de hacer esto en MySQL .
Gracias de antemano