2014-03-03 33 views
0

有點堆棧,並無法弄清楚。想知道如果你能幫助... 我要排除帳戶與100開始...
sql與不存在返回架構,但沒有記錄

SELECT * 
    FROM Inventory --returns 300 records 
SELECT * 
    FROM Inventory 
WHERE AccNum LIKE '100%' --returns 50 records 

但是這一次返回模式,並沒有記錄。爲什麼?我應該得到250條記錄...

SELECT * 
    FROM Inventory 
WHERE NOT EXISTS(SELECT * 
        FROM Inventory 
        WHERE AccNum LIKE '100%') 

回答

2

我想你的意思:

SELECT * FROM Inventory 
WHERE AccNum not in (SELECT AccNum FROM Inventory WHERE AccNum LIKE '100%') 

在原來的 'SELECT * FROM庫存WHERE AccNum LIKE'100%' 將始終返回記錄,所以不存在將永遠失敗

+0

我用不是這個原因EXISTS,因爲我需要使用AccNum LIKE「100%」或AccNum LIKE「200 %'。 NOT IN只支持一個條件。 – user3200249

+0

該表達式可以包含更多位: 不在(SELECT AccNum FROM Inventory WHERE AccNum LIKE'100%'或AccNum like'200%') – Rob

5

讓我解釋爲什麼你的查詢首先失敗,然後展示如何解決它。

這是因爲預期不起作用查詢:

SELECT * 
FROM Inventory 
WHERE NOT EXISTS(SELECT * FROM Inventory WHERE AccNum LIKE '100%'); 

它不返回任何行的原因是因爲where條款。子查詢返回50行。因此,它存在。換句話說,該版本的查詢將返回表中的所有行或者不返回任何行。行與行之間沒有任何變化。解決這個問題

一種方式是通過使用in

SELECT * 
FROM Inventory i 
WHERE AccNum NOT IN (SELECT AccNum FROM Inventory i2 WHERE AccNum LIKE '100%'); 

這將工作,只要AccNum是從來沒有NULL

當然,一個更簡單的方法就是使用一個簡單的where條款:

SELECT * 
FROM inventory 
WHERE AccNum NOT LIKE '100%' OR AccNum IS NULL; 
+0

感謝,當我將子查詢更改爲:
SELECT * FROM Inventory i2 WHERE AccNum LIKE '100%' 或AccNum LIKE '200%' 和i2.AccNum = i.AccNum
我有沒有記錄一次。 :( – user3200249

相關問題