如何仅选择具有多个具有值的给定字段的行

时间:2011-01-28 18:52:50

标签: sql mysql select

是否有一些优雅的方法,没有WHERE有很多ANDOR?例如,有4列:A,B,C,D。对于每一行,列具有随机整数值。我只需要选择那些具有多个具有非零值的列的行。例如,应该选择(1,2,3,4)和(3,4,0,0),但是不应该选择(0,0,7,0)(没有只有零的行)。

PS。我知道这看起来如何,但有趣的是,这不是考试或其他什么,这是一个真正的查询,我需要在一个真正的应用程序中使用:D

3 个答案:

答案 0 :(得分:2)

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

我相信这是最短的方式,但不一定是效率最高的方式。

答案 1 :(得分: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

答案 2 :(得分:0)

尝试

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