gpt4 book ai didi

SQL连接具有特定条件的两个表

转载 作者:行者123 更新时间:2023-12-04 18:26:17 27 4
gpt4 key购买 nike

表A结构:

enter image description here

表B结构:

enter image description here

上面是两张表,TableB.TableARelationID是一个relationID,用来映射表A。

期望的输出:

enter image description here

所需的结果将采用 TableA.RecordID 和 TableB.Text,但仅是表 B 中的类型 2,即忽略类型 1

下面是我使用的 SQL 查询:

SELECT tablea.recordid, 
tableb.text
FROM tablea
LEFT JOIN tableb
ON tablea.relationid = tableb.tablearelationid
WHERE type = 2

但是上面的查询会输出:

enter image description here

即 RecordID 1 丢失,因为过滤了“where”子句。

那么如何从表 A 中显示 RecordID 1 呢?

最佳答案

您需要移动type = 2过滤连接条件:

SELECT  TableA.RecordID, TableB.Text 
FROM TableA
LEFT JOIN TableB
ON TableA.RelationID = TableB.TableARelationID
AND TableB.Type = 2;

考虑一下这个结果:
SELECT  TableA.RecordID, TableB.Text, TableB.Type
FROM TableA
LEFT JOIN TableB
ON TableA.RelationID = TableB.TableARelationID;

你会得到
RecordID | Text | Type
1 | NULL | NULL
2 | B | 2
3 | C | 2
4 | D | 2

然后您在类型列上进行过滤,因此对于 recordID = 1,您的位置是 NULL = 2这是假的(它实际上不是假的,它是空的,但它不是真的),所以这个记录从最终结果中被排除。

每当您离开连接时,您都必须应用您希望应用于连接条件中的左表的任何过滤条件,而不是位置,否则您将有效地将其转换为内部连接。

关于SQL连接具有特定条件的两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20836566/

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