2011-06-02 60 views
1

我試圖讓DISTINCT和NOT NULL值,但是這似乎並沒有工作:爲什麼我的查詢返回空值,當我有一個NOT NULL子句我的WHERE語句

SELECT DISTINCT ITEM 
FROM TABLE 
WHERE ITEM IS NOT NULL 

這將返回DISTINCT值,但它也返回NULL VALUES。

樣品:

ITEM 
a 
a 
b 
b 
c 
c 
NULL 

輸出:

a 
b 
c 
NULL 
+2

您的查詢沒有錯。我懷疑你的數據。試試這個where子句。 'WHERE ITEM NOT NULL AND ITEM'''''' – 2011-06-02 16:20:52

+0

你接受的答案無法解釋你說你得到的結果。 'ITEM'是'varchar(max)'列,之前是'text'?如果是這樣[看到這個問題](http://stackoverflow.com/q/10295771/73226) – 2012-04-29 09:58:04

回答

3

嘗試此。 「不是NULL」和「IS NULL」不適用於空白值。如果列允許空白,您可以覆蓋兩者。

SELECT 
    DISTINCT item FROM table 
WHERE 
    ISNULL(item,'') <> '' 
+0

是的,但爲什麼這個空值會導致NULL或「NULL」輸出? – 2011-06-02 16:25:01

+0

如果您發佈代碼,XML或數據樣本,**請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼樣本」按鈕(「{}」)以精確地設置格式和語法突出顯示它! – 2011-06-02 16:30:35

+1

此where子句*將過濾BLANK值*和NULL值。但是,它不會過濾'NULL'值。我很困惑。 – 2011-06-02 16:32:33

2

該語句將返回a b c除非你有 NULL不是symbol列:

SELECT DISTINCT ITEM FROM TABLE WHERE ITEM IS NOT NULL 

爲了驗證這一點,請嘗試以下

--check for 
SELECT DISTINCT ITEM FROM TABLE WHERE ITEM = 'NULL' 

--modify original query 
SELECT DISTINCT ITEM FROM TABLE WHERE NULLIF(ITEM, 'NULL') IS NOT NULL 
+0

您是不是指「NULLIF(ITEM,'NULL')<>'NULL'? – 2011-06-02 16:51:18

+2

@Ben Thul:NULLIF會將字符串'NULL'更改爲ymbol/value NULL,所以這可以。 – gbn 2011-06-02 16:53:34

+0

啊...你是我有ISNULL在我的腦海中 – 2011-06-03 16:40:17

1

檢查Item是Varchar類型,並且存儲值「NULL」。如果是這樣,請嘗試下面給出的查詢:

select distinct item from table where ISNULL(item,'')<>'' and item <> "NULL" 
+0

該條款過於複雜,也將*禁止空白字段*!我認爲'ITEM <>'NULL'和ITEM不是NULL'可能更適合這裏。 – 2011-06-02 16:28:16

相關問題