2017-09-05 108 views
1

我有一個表中的單個列,看起來像這樣:對NULL列使用WHERE子句時,mySQL select查詢不返回結果。

enter image description here

(場爲NULL我使用QTODBC7.0執行SQL查詢,而這個應用使得NULL字段查詢顯示爲空白。結果,而不是顯示文本「NULL」)

我有一個簡單的SQL查詢,如下所示:

select * from table where field3 <> 'randomstring' 

我希望查詢返回的所有字段,其中場3不等於'randomstring'的值。

'field3'這一列不等於'randomstring'的值,因此它應該在查詢中返回。

一個奇怪的事情發生了:

上述查詢返回任何內容!

enter image description here

場3等於NULL,因此,它不等於因此「randomstring」,該行應該在我的查詢返回的,但事實並非如此。

我做了一些測試,並發現,這是當field3爲NULL但不是如果field3等於空白字符串(不爲NULL)時引起的。

當field3中可能有NULL值時,如何使select語句正常工作?

+0

使用'欄3 IS NULL'檢查null值

SELECT * FROM table WHERE field3 <> 'randomstring' or field3 IS NULL 

在這樣的查詢條件進行評估,以true如果字段3的值是NULL 。 – jarlh

+0

一個選項是['<=>'](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_equal-to)與操作符相等的NULL安全。 – wchiquito

回答

2

此行爲是由作爲SQL標準一部分的三值邏輯引起的。這意味着每個布爾條件可以評估爲true,falseunknown,並且只有在條件爲true時才返回該行。它被定義爲如果在等式的一側(或兩者)上存在NULL值,則結果是unknown。在你的情況下,條件的結果是unknown當字段3是NULL。因此,你需要使用jarlh提出了一個解決方案:由於unknown or true = true

+0

很好的解釋! – cleverpaul

相關問題