是否有一些优雅的方法,没有大WHERE
有很多AND
和OR
?例如,有4列:A,B,C,D。对于每一行,列具有随机整数值。我只需要选择那些具有多个具有非零值的列的行。例如,应该选择(1,2,3,4)和(3,4,0,0),但是不应该选择(0,0,7,0)(没有只有零的行)。
PS。我知道这看起来如何,但有趣的是,这不是考试或其他什么,这是一个真正的查询,我需要在一个真正的应用程序中使用:D
答案 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