Mysql 在SQL中使用多个或多个

Mysql 在SQL中使用多个或多个,mysql,sql,performance,Mysql,Sql,Performance,我需要编写一个查询,检查表中是否至少有一列的值大于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 你可以用 WHERE (raw_0 >0 OR raw_1 >0 OR raw_2 >0 OR raw_3 >0 OR raw

我需要编写一个查询,检查表中是否至少有一列的值大于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
  • 你可以用

    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运算符对字符串进行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 ;
    

  • 如果这些值只能是非负的,比如在一个OP注释中,那么您可以检查乘法

    WHERE raw_0 * raw_1 * raw_2 * raw_3 * raw_4 > 0
    
    但这将检查每个值是否为正值。要检查是否只有一个为正,我们可以使用
    符号
    函数否定此逻辑

    WHERE (1 - SIGN(raw_0)) 
        * (1 - SIGN(raw_1)) 
        * (1 - SIGN(raw_2)) 
        * (1 - SIGN(raw_3)) 
        * (1 - SIGN(raw_4)) = 0
    

    (1-符号(值))
    当值为零时返回1,当值为正时返回0,因此如果至少有一个值为正,则乘积将为0。

    原始列的内容是否为负?您现有的查询最容易编写和理解(对于优化器来说可能是最好的,因为不涉及计算)@schlonzo值不能为负值。它们为0或大于0。只有当原始列中的值不能为负值时,这才有效。@schlonzo:用户在其注释中指定该值不是负值。是的,您是对的。他在你回答后贴了那封信。但对其他人来说,知道可能是件好事。是的,当然@schlonzo。。谢谢你的强调和投票。