Postgresql 并与空字段进行比较

标签 postgresql select null compare

似乎在 PostgreSQL 中,empty_field != 1(或其他一些值)是 FALSE。如果这是真的,有人能告诉我如何与空字段进行比较吗?

我有以下查询,转换为“选择用户组中尚未投票的所有帖子:

SELECT p.id, p.body, p.author_id, p.created_at
FROM posts p
LEFT OUTER JOIN votes v ON v.post_id = p.id
WHERE p.group_id = 1 
AND v.user_id != 1

它什么也不输出,即使 votes 表是空的。也许我的查询有问题,而不是上面的逻辑?

编辑:似乎将 v.user_id != 1 更改为 v.user_id IS DISTINCT FROM 1 就可以了。 来自 PostgreSQL 文档:

For non-null inputs, IS DISTINCT FROM is the same as the <> operator. However, when both inputs are null it will return false, and when just one input is null it will return true.

最佳答案

如果要返回 v.user_id 为 NULL 的行,则需要特殊处理。修复它的一种方法是编写:

AND COALESCE(v.user_id, 0) != 1

另一种选择是:

AND (v.user_id != 1 OR v.user_id IS NULL)

编辑:spacemonkey 是正确的,在 PostgreSQL 中你应该在这里使用 IS DISTINCT FROM

关于Postgresql 并与空字段进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4126851/

相关文章:

django - 在 Django 中将 unaccent 与 SearchVector 和 SearchQuery 结合使用

mysql - 在rails中按月分隔日期

ruby-on-rails - 第一个 Heroku、Ruby 和 Postgres 应用程序 - 本地 Postgres 错误

python - Numpy 选择懒版本

sql - SQL —在SELECT中创建列以测试是否相等

postgresql - 具有来自可选子查询的多个返回值的 INSERT

mysql - 从 GROUP 中选择数据和最新库存

sql - 'IN' 子句的奇怪行为有效

java - 程序运行,只得到空值作为返回值

php - 如何将实际的 NULL 值插入到可为空的列中?