我正在尝试清理 SQL 服务器中的一些数据并在两个表之间添加一个外键。
我要删除的其中一个表中有大量孤立行。我不知道为什么下面的查询会在 MS SQL 服务器中返回 0 行。
--此查询不返回任何行
select * from tbl_A where ID not in ( select distinct ID from tbl_B )
当我在子查询中包含 IS NOT NULL 时,我得到了我期望的结果。
-- 返回的行包含 tbl_A 中的所有记录,但不包含 tbl_B 中的所有记录
select * from tbl_A where ID not in ( select distinct ID from tbl_B where ID is not null )
ID 列可以为空,并且包含空值。如果我只运行子查询,我会得到完全相同的结果,除了第一个查询按预期返回一个额外的 NULL 行。