Postgres查询多个where子句无法按预期工作

时间:2017-12-14 06:52:01

标签: sql postgresql

我有以下通知表:

| id (PK - INT) | user_id (UUID) | text (Text) | show_after (Date) default NULL | 

我想要的是选择user_id的所有通知,我还要确保我们不会显示未来show_after日期的通知。

因此,如果我想在5天后显示通知,我会设置show_after = NOW() + 5 days

由于某些原因,我设置的查询表现得非常奇怪,并且总是会返回show_after ===任何日期的通知,即使某些通知在将来设置了show_after日期。

这是我试过的查询:

select * from activities where user_id = '<uuid>' OR show_after = null AND 
show_after <= NOW();

我也试过切换OR / AND而没有成功。

1 个答案:

答案 0 :(得分:1)

您需要括号来控制逻辑

select * from activities 
where user_id = '<uuid>' 
and (
     show_after <= NOW()
   OR
     show_after IS NULL
    )
;

此外,在SQL中,您必须使用IS NULL来确定是否没有值。使用等号不起作用(NULL = NULL总是假的。)