在 SQL 中使用多个 OR [关闭]
Posted
技术标签:
【中文标题】在 SQL 中使用多个 OR [关闭]【英文标题】:Using multiple OR in SQL [closed] 【发布时间】:2014-07-15 07:05:14 【问题描述】:我需要编写一个查询来检查表中是否至少有一列的值大于 0 (>0)。目前,我已经编写了一个带有多个 OR 条件的“WHERE”子句。我怀疑这可能不是最好的方法(可能是使用 SUM?)。征求 SQL 专家的意见。
WHERE raw_0 >0 OR raw_1 >0 OR raw_2 >0 OR raw_3 >0 OR raw_4>0
【问题讨论】:
原始列的内容会不会是负数? 您现有的查询是最容易编写和理解的(并且可能对优化器来说是最好的,因为不涉及计算) @schlonzo 值不能为负数。它们为 0 或大于 0。 【参考方案1】:你可以使用
WHERE (raw_0 >0 OR raw_1 >0 OR raw_2 >0 OR raw_3 >0 OR raw_4>0);
根据您的问题。正如 dnoeth 所评论的那样,它是最容易编写和理解的(并且对于优化器来说可能是最好的,因为不涉及计算)
您也可以使用:
WHERE ((RAW_0 + RAW_1 + RAW_2 + RAW_3) > 0);
如果且仅当至少一个值>0时满足上述条件。
您还可以使用 concat 运算符来连接字符串并检查连接的字符串是否具有非零值:
WHERE TO_NUMBER ( RAW_0 || RAW_1 || RAW_2 || RAW_3 ) > 0
第三次查询的测试数据:
select 'YES value' data from dual where TO_NUMBER ( 1 || 2) > 0 ;
select 'NO value' data from dual where TO_NUMBER ( 0 || 0) > 0 ;
【讨论】:
这只有在原始列中的值不能为负数时才有效。 @schlonzo:用户已指定该值在他的 cmets 中不是负数。 是的,你是对的。他在你回答后发布了这个。但对其他人来说可能是件好事。 是的,当然@schlonzo ..也感谢您的突出和支持。【参考方案2】:如果值只能是非负数,如 OP 注释之一,那么您可以检查乘法
WHERE raw_0 * raw_1 * raw_2 * raw_3 * raw_4 > 0
但这将检查每个值是否为正。要检查是否只有一个是肯定的,我们可以使用 SIGN
函数来否定这个逻辑
WHERE (1 - SIGN(raw_0))
* (1 - SIGN(raw_1))
* (1 - SIGN(raw_2))
* (1 - SIGN(raw_3))
* (1 - SIGN(raw_4)) = 0
(1 - SIGN(value))
当值为0时返回1,当值为正时返回0,因此如果至少一个值为正,则乘积为0。
【讨论】:
以上是关于在 SQL 中使用多个 OR [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
从 SQL 表获取的数组中的单个 IF 语句与多个 IF 语句 [关闭]