提问人:Abdul Basit 提问时间:5/11/2023 更新时间:5/11/2023 访问量:31
coulmn 中的 NULL 值无法通过 POSTGRES SQL 中的相等运算符进行比较 [duplicate]
NULL values in coulmn are not comparable via equality operator in POSTGRES SQL [duplicate]
问:
我想从单个表中获取记录,其中列值与特定值和状态值相同。因此,我从表本身自行加入end_date
so_line_id
编号 | so_line_id | 田 | 价值 | end_date | create_date |
---|---|---|---|---|---|
1 | 4040 | 产品 | 提交 | 2022-02-07 02:03:40 | 2022-02-07 02:03:30 |
2 | 4040 | 产品 | pending_fulfillment | 2022-02-07 03:03:10 | 2022-02-07 02:03:40 |
3 | 4040 | 产品 | 积极 | 零 | 2022-02-07 03:03:10 |
4 | 4040 | 产品 | 积极 | 零 | 2022-02-15 06:20:10 |
我试图通过下面的查询提及来获得结果select * from product_history h1 join product_history h2 on h1.so_line_id = h2.so_line_id and h2.id != h1.id and h1.end_date = h2.end_date where h1.so_line_id = 4040;
当我们有 datetime 值而不是 NULL 时,上面完全可以正常工作。
答:
0赞
Abdul Basit
5/11/2023
#1
我们需要了解 NULL 在 PostgreSQL 中没有价值。它不等于 0、空字符串或空格。因此,没有相等运算符适用于 NULL 值。
select null = null;
是的,但我们没有得到任何结果。
而不是 or 我们应该使用 or 语句。=
!=
is
is not
select null is null;
?列? |
---|
真 |
现在,我通过语句将查询更改为测试的 null 值,如果有,还使用相等运算符来测试 datetime 对象is
select * from product_history h1
join product_history h2 on h1.so_line_id = h2.so_line_id and h2.id != h1.id
and
(
(h1.end_date = h2.end_date)
OR
(h1.end_date is null and h2.end_date is null)
)
where h1.so_line_id = 4040;
评论
0赞
jarlh
5/11/2023
IS 是 <null 谓词>的一部分,它不是一个语句。
评论
col1 is not distinct from col2