对于简约标题感到抱歉,但我不知道如何描述它。我有三张桌子:
小组表
ID | Genre
-----------------
1 | Action
2 | Adventure
3 | Drama
多对多的表
GroupID | ElementID
-----------------
3 | 1
1 | 2
2 | 2
2 | 3
3 | 3
元素表
ID | Element
-----------------
1 | Pride and Prejudice
2 | Alice in Wonderland
3 | Curious Incident Of A Dog In The Night Time
一切都很好,非常简单。我想要实现的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
我想从表格元素中选择全部元素,并将流派字段设置为戏剧或 null 。
我正在尝试在 MySQL 中执行此操作。
提前谢谢
答案 0 :(得分:20)
使用这个小技巧(在多对多表上进行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
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。