对 IN(NULL, 'test') 的 Postgres 查询不起作用



当我不想匹配具有某些特定字符串值或为null的列时,我认为我可以做这样的事情:

SELECT * FROM table_name WHERE column_name IN (NULL, 'someTest', 'someOtherTest');

但它不会返回column_name设置为NULL的列。这有记录吗?为什么它不起作用?

不能使用=比较NULL值(IN就是这样做的(。

手动报价

当任何一个输入为null时,普通的比较运算符都会产生null(表示"未知"(,而不是true或false。例如,7=NULL产生NULL,7<gt;空

您需要显式添加对NULL的检查:

SELECT * 
FROM table_name 
WHERE (column_name IN ('someTest', 'someOtherTest') OR column_name IS NULL);

NULL和空字符串(即''(在Postgres中被认为是不同的,与Oracle不同。

查询可以修改为:

SELECT * 
FROM table_name 
WHERE (column_name IN ('someTest', 'someOtherTest', '', ' ') OR 
column_name IS NULL);

相关内容

  • 没有找到相关文章

最新更新