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吗?我在这里缺少什么?
答案 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