2013-07-09 69 views
2

NOT IN子句在檢查條件時省略了值NULL值。NOT IN子句和NULL值

INPUT 
ID NAME 
1 A 
2 <null> 
3 C 

SELECT... FROM... 
WHERE NAME NOT IN ('C') 

僅返回ID值1,我既需要1 & 2.

能這樣做嗎?

+3

只需添加一個'或名稱null'它的行結束 –

+0

http://stackoverflow.com/questions/12966873/mysql-why-is-null-ignored-in-mysql – asifsid88

+0

基本上你想要顯示錶格數據,除了名稱是C ...? – Vishal

回答

5
WHERE NAME NOT IN ('C') OR NAME IS NULL 
0
SELECT... 
FROM... 
WHERE NAME NOT IN ('C') 
    OR NAME IS NULL 

SELECT... 
FROM... 
WHERE ISNULL(NAME, '') NOT IN ('C') 
+1

'ISNULL(NAME,'')NOT IN('C')'永遠不會被優化。不應該假定爲解決方案。 – zerkms

+0

同意 - 使用列上的任何函數使索引失效;這就是爲什麼當我看到類似「WHERE lower(username)=:param」這樣的代碼時我會畏縮,那麼我會問,爲什麼這個查詢太慢了「有一個用戶名索引!」 – Trent

+0

@zerkms - 雖然'NAME NOT IN('C')OR NAME IS NULL'可能會導致全表掃描,至少在Oracle上。 – APC

3

要麼你檢查NULL值

select * 
from not_in 
where name not in ('C') or name is null; 

,或者你可以在任何其它字符與聚結轉換NULL值。我在下面的示例中使用''。

select * 
from not_in 
where coalesce(name, ' ') not in ('C');