我有一個表,其中除一行外,一列大部分為 NULL。
ID STATUS VALUE POS
1 'BAD' 200 0
2 NULL 200 0
3 NULL 300 1
4 'OK' 0 2
如果我做
Select * from table where STATUS != 'OK'
我預計
ID STATUS VALUE POS
1 'BAD' 200 0
2 NULL 200 0
3 NULL 300 1
但我明白了
ID STATUS VALUE POS
1 'BAD' 200 0
我想知道為什么,我知道我可以執行其他操作,例如 Where ID = 4,但為什么上面的查詢會為 NULL 值回傳一個空結果?
謝謝
uj5u.com熱心網友回復:
與 NULL 比較始終為 NULL。將 NULL 視為“未知值”。某些未知值是否不等于“OK”?這是未知的......所以結果是NULL。
在邏輯運算式中,NULL 被視為 FALSE。所以你沒有收到你想要接收的行。
在比較 () 之前,您必須對 NULL 值應用額外檢查 ( WHERE status != 'OK' OR status IS NULL) 或將 NULL 值轉換為某個確定的常量值WHERE COALESCE(status, '') != 'OK'。
注意 - 這種解釋不同于 CHECK 約束(包括 FOREIGN KEY 約束)中使用的解釋,其中 NULL 值被視為“匹配”。
uj5u.com熱心網友回復:
不能對 NULL 值使用“等于”或“不等于”
您必須使用IS NULL或IS NOT NULL例如:
Select * from table where STATUS != 'OK' OR Status IS NULL
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/453104.html
標籤:mysql
上一篇:是否可以在node.js中使用parcel-bundler獲取MySQL資料庫?或者有沒有更簡單的方法來使用parcel-bundler獲取MySQL資料庫
