为什么"where not in (select statement)"标准不返回与"where (select statement > parameter)"相同的资源?



此SQL语句不返回任何结果:

SELECT [AutoNo], [PersonID]   
FROM [PersonTBL]
WHERE PersonID NOT IN (SELECT PersonID 
                       FROM FollowUpTBL 
                       WHERE FDate > '09/24/2014')

而这个返回预期结果:

SELECT [AutoNo], [PersonID]   
FROM [PersonTBL]
WHERE (SELECT TOP 1 FDate 
       FROM FollowUpTBL 
       WHERE FollowUpTBL.PersonID = PersonTBL.PersonID
       ORDER BY FDate DESC) < '09/24/2014'

我需要返回所有在"2014年9月24日"之后有任何后续行动的人,为什么第一个SQL查询不起作用?而第二个查询返回真实数据!

有没有办法让第一个查询返回相同的结果(我的意思是使用"IN(select)")?

我需要返回所有在"2014年9月24日"之后有任何后续行动的人员,为什么第一个不起作用!

您的第一个语句是在WHERE语句中使用NOT IN子句。这会让你得到与你想要的完全相反的结果。

您的第一个查询当前是为了从PersonTBL中提取2014年9月24日之后没有预约的任何记录而编写的。你的NOT IN实际上应该只是一个IN,而不是基于你所说的你正在寻找的东西。

我发现了这个小故障,问题是因为有一些FollowUpTBL记录插入了PersonID=null,所以为了修复第一个sql查询并使其工作,我必须将其修改如下:

SELECT [AutoNo], [PersonID]   
FROM [PersonTBL]
WHERE PersonID NOT IN (
    SELECT PersonID 
    FROM FollowUpTBL 
    WHERE FDate > '09/24/2014'
    and PersonID Is Not Null
)

所以,添加"and PersonID Is Not Null"来解决问题,谢谢,

最新更新