当某个三个字段中至少有一个不为空时,我想在查询中包含一条记录。
我可能想得太多了,因为还需要存在其他“AND”子句。
我只需要使用括号吗?这是一个 Presto 查询。
最直接的方法是直接使用
or
运算符测试所有三列。正如您所注意到的,您应该用括号将整个条件括起来,以避免与其他条件中的 and
逻辑运算符具有更高优先级这一事实相关的错误:
(col1 IS NOT NULL OR col2 IS NOT NULL OR col3 IS NOT NULL)
然而,更优雅的解决方案可能是
coalesce
所有三列并检查结果:
COALESCE(col1, col2, col3) IS NOT NULL
这很简单。混合
AND
和 OR
时使用括号:
WHERE (col1 IS NOT NULL OR col2 IS NOT NULL OR col3 IS NOT NULL)
AND ...
您可以使用
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