一尘不染

反向查询SQL

sql

设置查询的常用方法

SELECT * from ____
  WHERE (Column1>0) and ____

就像问“什么是column1值> 0和column2 .....的记录?”

但是现在我想做相反的事情,

“对于此记录,值大于0的列是什么?”

给定指定记录ID的情况下,如何编写查询以返回列名称(如果列值满足条件)?有非整数列,应忽略。

编辑:我的表包含许多只接受值0或1的列。我想先通过一些约束将ID随机化,例如

SELECT id from ____
  WHERE Views>5000 and Q1=1 and Q3=1

然后进行随机化,然后显示并显示哪些列= 1。

“结果:ID:_。视图:__。存在Q1,Q3,Q6,Q14,Q38,Q45,Q56。(= 1)”

现在,从答案看来,我似乎必须逐列检查,而不是使用自动检查所有列的函数,因此我认为无论是使用SQL还是通过PHP进行后处理,方法都必须相同。我只是希望某种函数可以做到这一点,而不是编写循环。


阅读 291

收藏
2021-05-16

共1个答案

一尘不染

您可以为每个列基于CASE WHEN或IF构建字符串,如果该值大于0,则应进行验证。

例如:

CREATE TABLE test_tbl(
   id INT NOT NULL AUTO_INCREMENT,
   col1 INT,
   col2 INT,
   col3 INT,
   PRIMARY KEY ( id )
   );

insert into test_tbl (col1,col2,col3)
values 
(0,0,0),
(8,0,0),
(8,null,8),
(8,8,8);

select 
*,
TRIM(TRAILING ',' FROM 
  concat(
   if(col1 > 0,'col1,',''),
   case when col2 > 0 then 'col2,' else '' end,
   if(col3 > 0,'col3,','')
  )
) as bigger_than_0
from test_tbl
where (col1>0 or col2>0 or col3>0);

给出:

id  col1 col2 col3  bigger_than_0
2   8    0    0     col1
3   8    null 8     col1,col3
4   8    8    8     col1,col2,col3
2021-05-16