如何选择只有给定字段值大于一个的行

3
有没有更优雅的方法来做到这一点,而不需要一个有大量AND和OR的大WHERE语句呢?例如有4个列:A,B,C,D。对于每一行,列都有随机整数值。我只需要选择那些具有多个非零值列的行。例如(1,2,3,4)和(3,4,0,0)应该被选择,但是(0,0,7,0)不应该被选择(没有行只包含零)。
PS. 我知道看起来很有趣,但有趣的是这不是考试或其他什么,这是一个我需要在真实应用程序中使用的实际查询:D
3个回答

2
SELECT  *
FROM    mytable
WHERE   (0, 0, 0) NOT IN ((a, b, c), (a, b, d), (a, c, d), (b, c, d))

我认为这是最短的方法,但不一定是最有效的。

1

没有 WHERE,没有 OR,也没有 AND

SELECT
   IF(`column1` != 0,1,0) +
   IF(`column2` != 0,1,0) +
   IF(`column3` != 0,1,0) +
   IF(`column4` != 0,1,0) AS `results_sum`
FROM `table`
HAVING
   `results_sum` > 1

0

尝试

select *
from table t
where ( abs(sign(A))
      + abs(sign(B))
      + abs(sign(C))
      + abs(sign(D))
      ) > 0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接