admin

SQL JOIN多对多

sql

抱歉,简约标题很简短,但我不知道该如何形容。我有三个表:

组表

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中选择 所有 元素,并将体裁字段设置为 Dramanull

我正在尝试在 MySQL中 执行此操作。

先感谢您


阅读 213

收藏
2021-05-10

共1个答案

admin

这个小技巧是可能的(多对多表上的外部联接,约束是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。

2021-05-10