抱歉,简约标题很简短,但我不知道该如何形容。我有三个表:
组表
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
我想从表Elements中选择 所有 元素,并将体裁字段设置为 Drama 或 null 。
我正在尝试在 MySQL中 执行此操作。
先感谢您
这个小技巧是可能的(多对多表上的外部联接,约束是GroupID必须为3(对于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意思是:LEFT OUTER JOIN即使下表中没有与之相对应的行,也要取用之前表中的所有行(如果需要,请放在左手边)。该条件ON elements.ID = group_elements.ElementID AND group_elements.GroupID = 3表明,如果我们找到与ElementID匹配的任何内容,那么它也必须是一部戏剧(GroupID = 3)。然后,我们在groups表上执行另一个LEFT OUTER JOIN,这使我们能够显示Genre列;如果元素不是话剧,则显示NULL。
LEFT OUTER JOIN
ON elements.ID = group_elements.ElementID AND group_elements.GroupID = 3