spa*_*key 6 postgresql null select compare
似乎在PostgreSQL中,empty_field != 1
(或其他一些值)是假的.如果这是真的,有人可以告诉我如何与空字段进行比较吗?
我有以下查询,转换为"选择用户组中尚未投票的所有帖子:
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
Run Code Online (Sandbox Code Playgroud)
即使投票表为空,它也不输出任何内容.也许我的查询有问题,而不是上面的逻辑?
编辑:似乎改变v.user_id != 1
了v.user_id IS DISTINCT FROM 1
,完成了这项工作.来自PostgreSQL文档:
对于非空输入,IS DISTINCT FROM与<>运算符相同.但是,当两个输入都为null时,它将返回false,当只有一个输入为null时,它将返回true.
如果要返回 v.user_id 为 NULL 的行,则需要特别处理。您可以修复它的一种方法是编写:
AND COALESCE(v.user_id, 0) != 1
Run Code Online (Sandbox Code Playgroud)
另一种选择是:
AND (v.user_id != 1 OR v.user_id IS NULL)
Run Code Online (Sandbox Code Playgroud)
编辑:spacemonkey 是正确的,在 PostgreSQL 中你应该IS DISTINCT FROM
在这里使用。
归档时间: |
|
查看次数: |
11016 次 |
最近记录: |