41

很抱歉这个简约的标题,但我不知道如何简短地描述它。我有三张桌子:

分组表

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中执行此操作。

先感谢您

4

1 回答 1

47

这个小技巧是可能的(多对多表上的外部连接,约束条件是 GroupID 必须为 3(对于 Drama)

http://sqlfiddle.com/#!9/01cf3/1

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。

于 2013-07-21T16:34:18.240 回答