gpt4 book ai didi

mysql - SQL 连接同时具有一对一和一对多关系的表

转载 作者:行者123 更新时间:2023-11-29 07:19:40 29 4
gpt4 key购买 nike

这个标题可能是一个糟糕的标题,但我想不出更好的标题......

我有一种独特的模式,其中有 5 个具有关系的表,但其中一个表与两个表有关系。为了减少困惑,让我向您展示架构:

表A:

AID BID Name
1   1   101
2 1 102
3 1 103
4 2 104
5 3 105
6 4 106

其中 AID 是表 A 的主 ID,BID 是表 B 的主 ID

表B:

BID   CID   DID   Name
1     null  3     101
2 null 4 102
3 1 null 103
4 2 null 104

其中 CID 为空或 DID 为空

表C:

CID   DID   Name
1     1     A
2 2 B
3 3 A
4 4 B
5 5 C
6 5 A

表D:

DID   EID   Name
1     1     Alpha
2 1 Bravo
3 1 Charlie
4 1 Echo
5 2 Delta

表E:

EID   Name
1     Home
2 Away

我知道这可能有点令人困惑,但基本上数据可以做以下两件事之一:

  1. 表 A 中的数据可以连接到 B,然后是 C,然后是 D,​​最后是 E,或者
  2. 表A中的数据可以连接到B,然后是D,然后是E

我的问题是我想创建一个 SQL 查询来连接所有表,从 B.Name LIKE '%Some name%', 的任意行中获取 A.Name、A.AID 和 E.Name, C.Name LIKE '%Some name%'、D.Name LIKE '%Some name%' 和 E.Name LIKE '%Some name%'。

例如,我想要一个查询,如果我设置 E.Name LIKE '%Home%',查询将返回:

E.Name    E.EID    D.DID    C.CID    B.BID    A.AID    A.Name
Home      1        3        null     1        1        101
Home 1 3 null 1 2 102
Home 1 3 null 1 3 103
Home 1 4 null 2 4 103
Home 1 1 1 3 5 103
Home 1 2 2 4 6 103

目前,我当前的查询仅返回“随机”数据,我的意思是它返回一些内容,但不是正确的内容,而且我无法弄清楚它返回的行与查询正在提取的行有哪些共同点。但基本上我的查询是:

select ... from tableA, 
inner join tableB on A.BID=B.BID
inner join tableC on B.CID=C.CID
inner join tableD on C.DID=D.DID OR B.DID=D.DID
inner join E.EID = D.EID
WHERE E.Name LIKE '%Home%';

任何建议都会很棒!谢谢!!!

最佳答案

如果您将几个 INNER JOIN 更改为 LEFT JOIN,您应该会得到所需的结果。

SELECT e.Name, e.EID, d.DID, c.CID, b.BID, a.AID, a.Name
FROM TableA a
INNER JOIN TableB b ON a.BID = b.BID
LEFT JOIN TableC c ON b.CID = c.CID
INNER JOIN TableD d ON c.DID = d.DID or b.DID = d.DID
INNER JOIN TableE e ON d.EID = e.EID
WHERE e.Name LIKE '%Home%'

关于mysql - SQL 连接同时具有一对一和一对多关系的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36653373/

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