gpt4 book ai didi

SQL连接查询多个一对多?还是多对多?

转载 作者:行者123 更新时间:2023-12-04 14:29:48 26 4
gpt4 key购买 nike

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

我有两个表,一个“客户”表和一个单独的“姓名”表。基础是客户端可以有一个或两个(最大)名称。我这样构造它们,以便每个“名称”都可以有不同的标题。这些表是:

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...

titles 
+------------+-------------+
| titleID | titleName |
+------------+-------------+
| 1 | Mr |
| 2 | Mrs |
| 3 | Miss |
+------------+-------------+

例如 clientID = 1 是 P Banks 先生 '&' W Smith 夫人

问题是我不熟悉通过查询获得上述答案。

我不能尝试:

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

最佳答案

您需要连接到 Names(和 Titles)表两次,一次用于 nameID1,一次用于 nameID2。我假设客户端必须至少有一个名称,因此 nameID1 是 INNER JOIN,并且由于 namedID2 是可选的(可为 null),它是 LEFT OUTER JOIN

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

关于SQL连接查询多个一对多?还是多对多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8989832/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com