Mar*_*šak 26 mysql sql many-to-many join
对简约标题感到抱歉,但我不知道如何描述它.我有三张桌子:
组表
ID | Genre
-----------------
1 | Action
2 | Adventure
3 | Drama
Run Code Online (Sandbox Code Playgroud)
很多很多桌子
GroupID | ElementID
-----------------
3 | 1
1 | 2
2 | 2
2 | 3
3 | 3
Run Code Online (Sandbox Code Playgroud)
和元素表
ID | Element
-----------------
1 | Pride and Prejudice
2 | Alice in Wonderland
3 | Curious Incident Of A Dog In The Night Time
Run Code Online (Sandbox Code Playgroud)
一切都很好,非常简单.我想要实现的SELECT如下
ID | Element | Genre
-------------------------------------------------------------
1 | Pride and Prejudice | Drama
2 | Alice in Wonderland | NULL
3 | Curious Incident Of A Dog In The Night Time | Drama
Run Code Online (Sandbox Code Playgroud)
我想从表Elements中选择所有元素,并将类型字段设置为Drama或null.
我试图在MySQL中这样做.
先感谢您
Mik*_*ert 22
使用这个小技巧(在多对多表上进行OUTER JOIN,具有GroupID必须为3的约束(对于戏剧)是可能的)
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
Run Code Online (Sandbox Code Playgroud)
LEFT OUTER JOIN意思是:从下面的表格中取出所有线条(LEFT OUTER JOIN如果你愿意的话,在左手边的那些线条上),即使下表中没有与它们对应的线条.条件ON elements.ID = group_elements.ElementID AND group_elements.GroupID = 3说如果我们发现任何与我们的ElementID匹配的东西,它也必须是戏剧(GroupID = 3).然后我们在groups表上执行另一个LEFT OUTER JOIN,这使我们能够显示Genre列,如果元素不是戏剧,则为NULL.