[英]How to select only those rows which have more than one of given fields with values
有没有一些优雅的方法来做到这一点, 没有一个大的WHERE
有很多AND
和OR
? 例如,有4列:A,B,C,D。对于每一行,列具有随机整数值。 我只需要选择那些具有多个具有非零值的列的行。 例如,应该选择(1,2,3,4)和(3,4,0,0),但是不应该选择(0,0,7,0)(没有只有零的行)。
PS。 我知道这看起来如何,但有趣的是,这不是考试或其他什么,这是一个真正的查询,我需要在一个真正的应用程序中使用:D
SELECT *
FROM mytable
WHERE (0, 0, 0) NOT IN ((a, b, c), (a, b, d), (a, c, d), (b, c, d))
我相信这是最短的方式,虽然不一定是效率最高的。
那里。 没有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
尝试
select *
from table t
where ( abs(sign(A))
+ abs(sign(B))
+ abs(sign(C))
+ abs(sign(D))
) > 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.