为什么没有"哪里没有(选择陈述)"标准返回与"在哪里(选择语句>参数)"?

时间:2014-10-28 12:25:22

标签: sql sql-server

此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查询不起作用?第二个查询返回真实数据!

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

3 个答案:

答案 0 :(得分:1)

  

我需要让所有谁拥有在'09 / 24/2014之后进行任何跟进',为什么第一个没有用呢!

您的第一个声明是在NOT IN声明中使用WHERE子句。这将使你完全与你想要的相反。

答案 1 :(得分:1)

您的第一个查询目前是为了从PersonTBL中提取任何记录,他们在9/24/2014之后没有预约。根据您所说的内容,你的NOT IN应该只是一个IN。

答案 2 :(得分:1)

我发现了故障,问题是因为有一些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
)

所以,添加“和PersonID不是空”修复问题,谢谢,