Postgresql并与空字段进行比较
似乎在PostgreSQL中,Postgresql并与空字段进行比较,postgresql,select,null,compare,Postgresql,Select,Null,Compare,似乎在PostgreSQL中,empty_字段!=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 即使投票表是空的,它
empty_字段!=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
即使投票表是空的,它也不会输出任何内容。也许我的查询有问题,而不是上面的逻辑有问题
编辑:似乎将v.user\u id!=1
更改为v.user\u id有别于1
,完成了这项工作。
从PostgreSQL文档:
对于非空输入,与
与运算符相同。
但是,当两个输入都为空时,它将
将返回false,而当只有一个
输入为null,则返回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中,您应该使用的
与此处的不同。NULL是一个未知值,因此它永远不能等于某个值。请研究使用COALESCE函数。可能与各种其他问题重复,例如,,…似乎与执行任务不同too@spacemonkey:你说得对,那太好了实际上,在PostgreSQL中,这是一个更好的方法。我完全忽略了它。