gpt4 book ai didi

mysql - SQL查询多个表,其中1中不存在记录

转载 作者:行者123 更新时间:2023-11-29 18:24:46 26 4
gpt4 key购买 nike

所以我总是在这种类型的查询上遇到麻烦。我有 2 个表,需要将它们合并为 3 个表,但我需要查询来查看一个连接中是否不存在记录。

设计是这样的:表 1 连接到表 2 查找现有记录。然后,表 1 需要使用不同的记录 ID 再次连接到表 2,但查找不存在的记录。

我当前的代码如下所示:

select p.ProfileId, p.OrgInd, p.OrgName, p1.OrgInd, p1.ProfileId
from profile as p inner join
ProfileRelations as pa on p.ProfileId = pa.ProfileID inner join
profile as p1 on p1.ProfileId = pa.RelProfileID

我需要配置文件(p)连接到PRofileRelations(pa),因为它指出,但然后我需要将ProfileRelations(pa)连接回Profile(p1),其中p1.profileid在ProfileRelations(pa)中不存在,具体查看RelProfileID 列。

这是一个关联表,用于查看相关记录。 Profile 表包含我的所有客户,我可以将它们作为连接进行关联。我正在寻找的是向我显示任何没有相关记录的个人资料。给出的代码向我显示了那些确实有相关记录的人,我现在只想查看那些没有相关记录的人。

谢谢。

杰森

最佳答案

连接的可视化理解:https://blog.codinghorror.com/a-visual-explanation-of-sql-joins/

使用左连接:

没有相关关系的所有配置文件。在本例中,我们连接表,但我们知道 p1 和 pa 的值将为空,因为左连接将包括所有配置文件,并且仅保留关系表中具有相关记录的配置文件。

SELECT p.ProfileId, p.OrgInd, p.OrgName, p1.OrgInd, p1.ProfileId
FROM profile as p
LEFT join ProfileRelations as pa
on p.ProfileId = pa.ProfileID
LEFT join profile as p1
on p1.ProfileId = pa.RelProfileID
WHERE PA.ProfileID is null

由于 where 子句,上面的 P1 值将始终为 null。

OR 使用不存在且相关的子查询

所有没有相关配置文件关系的配置文件。因为我们知道没有关系,所以我们不需要其他表中的数据;因此我们可以将它们从选择中排除,从而简化查询并提高性能。

SELECT p.ProfileId, p.OrgInd, p.OrgName
FROM profile as p
WHERE NOT EXISTS (SELECT *
FROM ProfileRelations as pa
WHERE p.ProfileId = pa.ProfileID)

在此我们根本不选择 P1 表,因为没有关系记录。

关于mysql - SQL查询多个表,其中1中不存在记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46287714/

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