2014-10-28 31 views
1

這個SQL語句返回任何結果:爲什麼不在「(select語句)」條件中返回與「where(select statement> parameter)」相同的resault?

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' 

我需要返回誰擁有之後的任何後續所有人'09 /二千〇一十四分之二十四',爲什麼第一個SQL查詢不起作用?而第二個查詢返回真實的數據!

是否有任何方法可以使第一個查詢返回相同的結果(我的意思是使用「IN(select)」)?

+2

您的第一個和第二個查詢有不同的日期? – Sparky 2014-10-28 12:29:35

+0

對不起Sparky,但即使在相同的日期,我沒有結果時,先運行sql – 2014-10-28 12:36:00

+1

第一個查詢返回日期後沒有任命的人的PersonID。 (他們可能根本沒有預約) 第二個返回最後約會在日期之前的人的PersonID。 – Kobi 2014-10-28 13:20:23

回答

1

我找到了故障,該問題是因爲有插入的是PersonID = NULL一些FollowUpTBL記錄,因此,要解決第一個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不是空」修復問題,謝謝,

1

我需要返回所有的人誰擁有後'09 /2014分之24' ,爲什麼第一個沒有工作的任何後續!

您的第一條評價是在您的WHERE聲明中使用NOT IN子句。這會讓你完全與你想要的相反。

+0

是否有任何方法可以使第一個查詢返回相同的結果(我的意思是使用「IN(select)」)? – 2014-10-28 12:39:05

1

您的第一個查詢當前被寫入,以便在2014年9月24日之後他們沒有預約的情況下從PersonTBL中提取任何記錄。你的NOT IN應該只是一個IN,而不是基於你所說的你所尋找的。