Select Distinct Not In Select Distinct 返回 0 行,应该接近 1000
Select Distinct Not In Select Distinct Returning 0 Rows, Should be almost 1000
Select Distinct FileId From dbo.Files
returns 3415 行
Select Distinct FileId From dbo.SyncHistory Where Date > '2015/7/1'
returns 2483 行。
Select Distinct FileId From dbo.Files
Where FileId In (Select Distinct FileId From dbo.SyncHistory Where Date > '2015/7/1')
returns 2482 行。好吧,有人在这个月进行了同步,但我猜后来删除了他们的文件。
但是:
Select Distinct FileId From dbo.Files
Where FileId NOT In (Select Distinct FileId From dbo.SyncHistory Where Date > '2015/7/1')
Returns 0 行.
我以为我的连接断开了,但我已经 运行 并重新运行 它并且结果是一致的,即使也一直是错误的。这是 sql 错误吗?我在这里错过了什么?
可能与FileId 列中的空值有关。请检查分别执行的内部和外部查询中的空值。如果您发现空值,那么以下应该有效:
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)
尝试
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
Select Distinct FileId From dbo.Files
returns 3415 行
Select Distinct FileId From dbo.SyncHistory Where Date > '2015/7/1'
returns 2483 行。
Select Distinct FileId From dbo.Files
Where FileId In (Select Distinct FileId From dbo.SyncHistory Where Date > '2015/7/1')
returns 2482 行。好吧,有人在这个月进行了同步,但我猜后来删除了他们的文件。
但是:
Select Distinct FileId From dbo.Files
Where FileId NOT In (Select Distinct FileId From dbo.SyncHistory Where Date > '2015/7/1')
Returns 0 行.
我以为我的连接断开了,但我已经 运行 并重新运行 它并且结果是一致的,即使也一直是错误的。这是 sql 错误吗?我在这里错过了什么?
可能与FileId 列中的空值有关。请检查分别执行的内部和外部查询中的空值。如果您发现空值,那么以下应该有效:
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)
尝试
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