首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Join查询多对多?还是多对多?

SQL Join查询多对多?还是多对多?
EN

Stack Overflow用户
提问于 2012-01-24 23:54:59
回答 1查看 5.3K关注 0票数 3

希望这是一个简单的问题!

我有两个表,一个‘客户(S)’表和一个单独的'names‘表。其基础是一个客户端可以有一个或两个(最大)名称。我这样组织它们,这样每个“名字”都可以有一个不同的标题。这些表包括:

代码语言:javascript
复制
clients
+------------+-------------+------------+
| clientID   | nameID1     | nameID2    |
+------------+-------------+------------+
|          1 | 1           | 2          |
|          2 | 3           |            |
|          3 | 4           |            |
+------------+-------------+------------+


names 
+------------+-------------+------------+------------+
| nameID     | surname     | initials   | titleID    |
+------------+-------------+------------+------------+
|          1 | Banks       | P          | 1          |
|          2 | Smith       | W          | 2          |
|          3 | Wilson      | BT         | 2          |
|          4 | Jefferson   | JP         | 3          |
+------------+-------------+------------+------------+

从何处检索titleID ...

代码语言:javascript
复制
titles 
    +------------+-------------+
    | titleID    | titleName   |
    +------------+-------------+
    |          1 | Mr          |
    |          2 | Mrs         |
    |          3 | Miss        |
    +------------+-------------+

例如,clientID =1就是P班克斯先生和W·史密斯夫人

问题是我不熟悉通过查询来得到上面的答案。

我不能尝试:

代码语言:javascript
复制
SELECT
clientID, names.surname, names.initials, titleName
FROM clients, names, titles
WHERE titleID = titleID AND
NameID1 = nameID AND
NameID2 = nameID

如何正确地联接查询中的表以查找,例如clientID 1 = Mr P Banks '&' Mrs W Smith

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-25 00:00:53

您需要加入Names (和Title)表两次,一次用于nameID1,一次用于nameID2。我假设客户端必须至少有一个名称,因此nameID1是INNER JOIN,而namedID2是可选的(可以为空),所以它是LEFT OUTER JOIN

代码语言:javascript
复制
SELECT c.clientID, n1.surname, n1.initials, t1.titleName, n2.surname, n2.initials, t2.titleName
FROM clients c
INNER JOIN names n1 ON nameID1 = n1.nameID
INNER JOIN titles t1 ON n1.titleID = t1.titleID
LEFT OUTER JOIN names n2 ON nameID2 = n2.nameID
INNER JOIN titles t2 ON n2.titleID = t2.titleID
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8989832

复制
相关文章

相似问题

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