將WHERE
子句與NOT LIKE
on一起使用時my_text_column
,null
將跳過值。
為什麼以及如何獲得它?
SELECT count(id) FROM public.mytable;
count
-------
91
SELECT count(id) FROM public.mytable WHERE my_text_column LIKE 'foo';
count
-------
59
SELECT count(id) FROM public.mytable WHERE my_text_column NOT LIKE 'foo';
count
-------
0
SQL 標準對 Framework 4.4.2 中的 NULL 進行了說明:
[...]的空值既不等於為任何其他值,也沒有不等於任何其它值-它是未知它是否等於任何給定值[...]
在 4.4.3.3 中它說:
所述的值的布爾數據類型將是真或假。未知的真值有時用空值表示。
它以一種古怪的方式表示,將某些內容與 NULL 值進行比較將導致 NULL。可以這樣想:未知字符串是否像foo
.
有幾種方法可以得到你想要的東西:
使用coalesce
:
WHERE coalesce(my_text_column, 'foo') LIKE 'foo%'
使用OR
:
WHERE my_text_column LIKE 'foo%' OR my_text_column IS NULL
使用UNION ALL
:
SELECT count(id)
FROM (SELECT id FROM public.mytable
WHERE my_text_column LIKE 'foo%'
UNION ALL
SELECT id FROM public.mytable
WHERE my_text_column IS NULL) AS subq;
像這樣的查詢使索引變得複雜。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句