当三个字段中至少有一个不为空时,SQL 查询包含行

问题描述 投票:0回答:3

当某个三个字段中至少有一个不为空时,我想在查询中包含一条记录。

我可能想得太多了,因为还需要存在其他“AND”子句。

我只需要使用括号吗?这是一个 Presto 查询。

sql null presto
3个回答
2
投票

最直接的方法是直接使用

or
运算符测试所有三列。正如您所注意到的,您应该用括号将整个条件括起来,以避免与其他条件中的
and
逻辑运算符具有更高优先级这一事实相关的错误:

(col1 IS NOT NULL OR col2 IS NOT NULL OR col3 IS NOT NULL)

然而,更优雅的解决方案可能是

coalesce
所有三列并检查结果:

COALESCE(col1, col2, col3) IS NOT NULL

1
投票

这很简单。混合

AND
OR
时使用括号:

WHERE (col1 IS NOT NULL OR col2 IS NOT NULL OR col3 IS NOT NULL)
AND ...

1
投票

您可以使用

IS NOT NULL
检查每一列:

col1 IS NOT NULL OR col2 IS NOT NULL OR col3 IS NOT NULL

或者:

NOT (col1 IS NULL AND col2 IS NULL AND col3 IS NULL) 

或与

COALESCE()
:

COALESCE(col1, col2, col3) IS NOT NULL
© www.soinside.com 2019 - 2024. All rights reserved.