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

SQL Query include row when at Least one of three fields is not null

我想在我的查询中包含一条记录,从特定的三个字段中,至少三个字段中的一个不为空。

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

我只需要使用括号吗? 顺便说一句,如果有帮助的话,这是一个 Presto 查询。

很简单。混合 ANDOR 时使用括号:

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

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

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

然而,更优雅的解决方案可能是 coalesce 所有三列并检查结果:

COALESCE(col1, col2, col3) IS NOT NULL

您可以使用 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