加入表 SQL Server

3
我想要连接两个表,但是我希望结果集只显示右侧没有匹配的内容。
例如:
左表 leftID | PK value |
右表
rightID | PK leftID | FK
使用左ID外键关系,我知道这不会给我想要的结果,但我只是想找出左表中哪些项目在右侧不存在。
有什么想法吗?
5个回答

11

我们如果这样做会怎么样?

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的行。


1
你认为将别名设置为RESERVED关键字是一个好的做法吗? - Adriaan Stander
好的,我们不应该使用保留字。我会改成别名。 - Nitin Midha

5

你几乎做到了,只需要进行一些小的修改 - 连接应该是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

1
你认为将别名设置为RESERVED关键字是一个好的做法吗? - Adriaan Stander
不,我假设表的名称已更改以保护无辜者,并且这些实际上并非生产系统中使用的名称。我当然希望如此。但我还是会进行更改。 - Mark Byers

0
SELECT LeftID
FROM LeftTable 
    LEFT OUTER JOIN RightTable ON LeftTable.LeftID = RightTable.LeftID
WHERE RightTable.RightId IS NULL

0

使用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
            )

0

select * from LeftTable where leftID not in (select leftID from RightTable)

查询左表中不在右表中的数据


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接