PostgreSQL - 查找两个值的相等性,这两个值都可以是 NULL

标签 postgresql

在 PostgreSQL 中,NULL 不被认为等于任何东西,因此 NULL = NULL 返回 false。我正在编写一个查询,其中一个 WHERE 条件检查两个值是否相等。如果两个值都是 NULL,我希望它像任何其他值比较一样返回 true。目前我这样做:

SELECT foo
FROM bar
WHERE baz = qux
   OR (baz IS NULL AND qux IS NULL);

有没有更好的办法?

最佳答案

您可以使用 null 安全相等比较 IS NOT DISTINCT FROM:

SELECT foo
FROM bar
WHERE baz IS NOT DISTINCT FROM qux;

这是一个简短的演示,显示当 IS NOT DISTINCT FROM 的两侧都是相同的非 NULL 值,或者两者都是 时返回记录空:

Demo

关于PostgreSQL - 查找两个值的相等性,这两个值都可以是 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54405745/

相关文章:

java - 超快文件存储引擎

PostgreSQL 9.5 - 行级安全性/ROLE 最佳实践

python - psycopg2.errors.StringDataRightTruncation : value too long for type character varying(256)

spring - 有没有办法模拟从 spring 到本地主机上的 postgres 数据库的往返时间?

python - Postgres 无法在 Python 中获取数据

sql - PostgreSQL:如果我为每个表定义一对一 View 并仅从 View 层进行查询,是否会使用基础表的索引?

arrays - 多对多表组合成数组

postgresql - 我可以从 Postgres 函数返回字符串列表吗?

json - 带有命令条的 Postgres COPY 从 JSON 文件中转义(还将每一行加载为单独的行)

PHP和pgbouncer处于事务模式: current transaction is aborted