此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"来解决问题,谢谢,