2011-03-09 49 views
1

我有一個運行良好的查詢,然後我想添加到現有的where條件是這樣的:! 和some_column = 1個=在MySQL沒有工作,我希望

這列值爲空。但查詢停止查找它用來查找的行。任何想法爲什麼?

謝謝。 亞歷

+1

什麼是您查詢是什麼樣子? – BoltClock 2011-03-09 06:04:36

回答

2

SQL是臭名昭著其比較處理空值的。如果列可以爲空,你想這樣做就可以了比較,你應該使用ISNULL:

WHERE ISNULL(column_name, -1) != 0 

這應該照顧你的問題。

+1

我認爲'(column_name爲null或column_name!= 1)'會更直觀,可能會運行得更快。 – Malvolio 2011-03-09 06:10:24

+0

@Malvolio - 在性能方面,如果有任何差異,將會有微不足道的差異。更直觀的,我不這麼認爲,但那純粹是主觀的。我認爲更少的代碼比更多的代碼更直觀,並且我看到很多真正無法正確理解SQL中的OR的人。 – 2011-03-09 06:13:48

+0

@Malvolio你的想法奏效了! :) – Genadinik 2011-03-09 06:19:30

0

使用「<>可能工作...可以給試圖在幾乎所有形式

where ISNULL(coloumn_name,1) <> 1 
+0

但是'<>'和'!='是一樣的...... – BoltClock 2011-03-09 06:07:48

+0

不行,不行。 – Malvolio 2011-03-09 06:11:04

+0

好的,更新some..plz檢查...和處理NULL值SQL總是凌亂 – 2011-03-09 06:14:53

2

幾乎所有null表達式都爲null。 1 != null是UNKNOWN(因此會導致該行從結果集中刪除)。 1 = null是未知。 1 + null是未知。

最重要的異常:null is null爲TRUE。

+0

但'空=空'評估爲假 – nzifnab 2011-03-09 06:12:03

+0

它當然會。使用'is'。 – Malvolio 2011-03-09 06:13:43

+0

我知道我只是顯示了'null'的奇怪 – nzifnab 2011-03-09 06:22:03

1

根據定義,NULL爲「未知值」...因此,null!= 1是未知結果。 NULL 可能爲爲1,它可能不是 - 但關鍵是SQL不會嘗試猜測。這是SQL處理值的一種奇怪的方式,但它就是這樣。

因此,如果你想佔你需要你的地方改成這樣可能空:

AND some_column != 1 AND some_column IS NOT NULL