我想要连接两个表,但是我希望结果集只显示右侧没有匹配的内容。
例如:
左表 leftID | PK value |
右表
rightID | PK leftID | FK
使用左ID外键关系,我知道这不会给我想要的结果,但我只是想找出左表中哪些项目在右侧不存在。
有什么想法吗?
例如:
左表 leftID | PK value |
右表
rightID | PK leftID | FK
使用左ID外键关系,我知道这不会给我想要的结果,但我只是想找出左表中哪些项目在右侧不存在。
有什么想法吗?
我们如果这样做会怎么样?
select LT.value
from LeftTable LT
left outer join RightTable RT
on LT.leftID = RT.leftID
Where RT.leftId is null
SO join会返回所有匹配的行以及左表中存在但右表中不存在的行。通过where子句,我们只获取右表中左侧ID为null的行。
你几乎做到了,只需要进行一些小的修改 - 连接应该是LEFT JOIN,而不是[INNER] JOIN,并且你需要仅返回右表缺失的行,即其字段为NULL:
SELECT T1.value
FROM LeftTable T1
LEFT JOIN RightTable T2
ON T1.leftID = T2.leftID
WHERE T2.leftID IS NULL
SELECT LeftID
FROM LeftTable
LEFT OUTER JOIN RightTable ON LeftTable.LeftID = RightTable.LeftID
WHERE RightTable.RightId IS NULL
使用exists
来代替where not in
是一个不错的选择。然而,使用带有右侧null状态检查的left outer join
可能仍是最优解。
select
left.*
from
LeftTable as left
where
not exists (
select
*
from
RightTable as right
where
right.RightID = left.LeftID
)
select * from LeftTable where leftID not in (select leftID from RightTable)
查询左表中不在右表中的数据