SQL 三个字段中至少有一个不为空时查询包含行
SQL Query include row when at Least one of three fields is not null
我想在我的查询中包含一条记录,从特定的三个字段中,至少三个字段中的一个不为空。
我可能想多了,因为还有其他需要存在的“AND”子句。
我只需要使用括号吗?
顺便说一句,如果有帮助的话,这是一个 Presto 查询。
很简单。混合 AND
和 OR
时使用括号:
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
我想在我的查询中包含一条记录,从特定的三个字段中,至少三个字段中的一个不为空。
我可能想多了,因为还有其他需要存在的“AND”子句。
我只需要使用括号吗? 顺便说一句,如果有帮助的话,这是一个 Presto 查询。
很简单。混合 AND
和 OR
时使用括号:
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