选择Distinct Not In Select Distinct返回0行,应该接近1000

时间:2015-07-20 16:08:07

标签: tsql distinct

Select Distinct FileId From dbo.Files 

返回3415行

Select Distinct FileId From dbo.SyncHistory Where Date > '2015/7/1' 

返回2483行。

Select Distinct FileId From dbo.Files 
Where FileId In (Select Distinct FileId From dbo.SyncHistory Where Date > '2015/7/1')

返回248 2 行。好的,所以有人在本月同步,但随后删除了我认为的文件。

BUT:

Select Distinct FileId From dbo.Files 
Where FileId NOT In (Select Distinct FileId From dbo.SyncHistory Where Date > '2015/7/1')

返回 0行

我认为我的连接已被破坏,但我已经运行并重新运行它,如果一直错误,结果也是一致的。这是一个sql bug吗?我在这里缺少什么?

2 个答案:

答案 0 :(得分:0)

可能是关于FileId列中的null。请检查内部和外部查询中的空值,分别执行它们。如果找到空值,则以下内容应该有效:

Select Distinct FileId From dbo.Files 
Where FileId In (Select Distinct FileId From dbo.SyncHistory Where Date > '2015/7/1' 
AND FileId IS NOT NULL)

Select Distinct FileId From dbo.Files 
Where FileId NOT In (Select Distinct FileId From dbo.SyncHistory Where Date > '2015/7/1' 
AND FileId IS NOT NULL)

答案 1 :(得分:0)

尝试

SELECT DISTINCT
a.FileID
FROM dbo.Files a
LEFT JOIN
(Select Distinct FileId From dbo.SyncHistory Where Date > '2015/7/1') b
ON a.FileID = b.FileID
WHERE b.FileID IS NULL