繁体   English   中英

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

[英]How to select only those rows which have more than one of given fields with values

有没有一些优雅的方法来做到这一点, 没有一个大的WHERE有很多ANDOR 例如,有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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM