首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL连接多到多。

问SQL连接多到多。
EN

Stack Overflow用户
提问于 2013-07-21 16:22:11
回答 1查看 120.9K关注 0票数 46

对于简约的标题我很抱歉,但我不知道怎么简单地描述它。我有三张桌子:

分组表

代码语言:javascript
复制
ID | Genre
-----------------
1  | Action
2  | Adventure
3  | Drama

多对多桌

代码语言:javascript
复制
GroupID | ElementID
-----------------
    3   |    1
    1   |    2
    2   |    2
    2   |    3
    3   |    3

以及元素表

代码语言:javascript
复制
ID | Element
-----------------
1  | Pride and Prejudice
2  | Alice in Wonderland
3  | Curious Incident Of A Dog In The Night Time

一切都很好,很简单。我要实现的选择如下

代码语言:javascript
复制
ID | Element                                         |  Genre
-------------------------------------------------------------
1  | Pride and Prejudice                             | Drama
2  | Alice in Wonderland                             | NULL
3  | Curious Incident Of A Dog In The Night Time     | Drama

我希望选择all,表元素中的元素,并将字段设置为、Drama、或null。

我正试着在MySQL做这件事。

提前谢谢你

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-21 16:34:18

使用这个小技巧是可能的(在多到多表上的外部连接,约束条件是GroupID必须是3(对于戏剧)。

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

代码语言:javascript
复制
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表上做另一个左外部联接,这使我们能够显示类型列,如果元素不是戏剧,则为NULL。

票数 56
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17774373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档