我只是好奇。我知道NULL安全等運營商< =>,但有一些空安全不等於運營商,或我必須一直使用類似的東西:MySQL - NULL安全不等於運算符
(tab.id != 1 OR tab.id IS NULL)
還是有人喜歡
!(tab.id <=> 1)
我只是好奇。我知道NULL安全等運營商< =>,但有一些空安全不等於運營商,或我必須一直使用類似的東西:MySQL - NULL安全不等於運算符
(tab.id != 1 OR tab.id IS NULL)
還是有人喜歡
!(tab.id <=> 1)
COALESCE(tab.id, 0) != 1
可以在這裏使用,如果你喜歡它。我瀏覽參數,並返回不是NULL
的第一個值。在這種情況下,如果它是NULL
,它會比較0 != 1
。雖然它可能會使用更多的符號,但它仍然更易於管理,而不是被迫在這些情況下總是將「布爾」作爲解決方案。
閱讀文檔我發現,NOT(NULL < => 1)的作品,我想這也是符合ISO標準,但是很麻煩。使用列名會是這樣一個更好的方式來顯示:NOT(tbl.col1 < => 1)
'<=>'不是標準的SQL,它是MySQL的擴展。對於SQL來說,標準等效的無效安全比較是非常冗長的:'IS [NOT] DISTINCT FROM'。 – 2013-11-04 22:27:16
如果您知道比較IS NOT NULL
的RHS:
COALESCE(tab.id != 1, 1)
或者
COALESCE(tab.id != 1, TRUE)
會給你正確的結果。
這是否是更好更具可讀性比:
(tab.id != 1 OR tab.id IS NULL)
是值得商榷..
我也被引誘與比較第一濾除NULL
邏輯,所以我不必想想他們!我可能會寫你的第一個等式爲:
(tab.id IS NULL OR tab.id != 1)
性能將取決於NULL
小號患病但是。
現在MySQL沒有NULL-safe不等於運算符。
使用的MySQL最普遍的解決方案是:
!(tab.id <=> 1)
或
NOT tab.id <=> 1
,因爲它會正常工作,如果連到位1
您將使用NULL
。
我認爲這是首選的方法,因爲這個查詢也可以在SQL Server上運行。最好的方法是不要有空值並且有適當的默認值,但源數據不能總是由開發人員來控制。 – 2015-01-25 18:08:27
不幸的是,如果你不知道這個比較的RHS的價值,你不知道什麼要COALESCE()你的NULL! – Arth 2016-02-04 14:42:30
如果你想比較tab.id和值,但它不起作用,如果你想比較tab.id和tab_childs.tab_id這兩個字段。 – 2017-12-18 14:44:38