2013-03-21 100 views
0

我有我的aanmeldingen表內的表結構:

SQL SELECT查詢需要幫助

username  varchar(16) NOT NULL 
introduce_van varchar(16) NULL 

我有如下3行數據:

Username Introduce_van 
Test1 NULL 
Test2 Test1 
Test3 NULL 

現在我想選擇所有用戶名都不在Introduce_van中,並且Introduce_van的值爲NULL。

我這個SQL試了一下:

SELECT username 
FROM aanmeldingen 
WHERE username NOT IN 
     (SELECT introduce_van 
     FROM aanmeldingen 
     WHERE introduce_van != 'NULL') 

該查詢返回:

Test2, Test3 

所以我想,如果我想補充:

AND introduce_van = 'NULL' 

這將只返回Test3的。

但它返回0行。

我只是無法弄清楚如何解決我的選擇查詢,以確保它不僅沒有在Introduce_van並具有Introduce_van NULL返回Test3的(

有人能幫助我走出這個查詢?

回答

0

當空值檢查,它要麼

is null 

is not null 

你的邏輯的其餘部分幾乎沒問題。你必須移動null值的檢查你的子查詢外,

0

另一種方法是使用LEFT JOIN和過濾器使用IS NULL,而不是=! NULLNULL值。

SELECT a.UserName 
FROM tableName a 
     LEFT JOIN tableName b 
      ON a.username = b.Introduce_van 
WHERE b.Introduce_van IS NULL AND 
     a.Introduce_van IS NULL 

輸出

╔══════════╗ 
║ USERNAME ║ 
╠══════════╣ 
║ Test3 ║ 
╚══════════╝  
+0

這將選擇行,其中Introduce_van爲空不到哪介紹麪包車比將用戶名 – 2013-03-21 01:03:38

+0

謝謝其他一些價值,你的解決方案爲我工作。還要感謝所有試圖幫助我的人。 – 2013-03-21 07:09:25

+0

不客氣':D' – 2013-03-21 07:09:53

0

你的意思是 「現在我想選擇所有的用戶名都沒有Introduce_van OR Introduce_van的值爲NULL。」 ???

如果是這樣,使用此:

SELECT Distinct username 
FROM aanmeldingen a 
WHERE introduce_van Is Null 
    Or Not exists 
     (SELECT * FROM aanmeldingen 
     WHERE introduce_van = a.userName)