反向查询SQL

时间:2016-07-16 06:16:21

标签: mysql sql

设置查询的常用方法

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

就像问“有什么记录的列1值> 0和列2 .....?”

但是现在我想以相反的方式做到这一点,

“对于此记录,哪些列的值> 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进行后处理,方法都必须相同。我只是希望某种功能可以做到这一点而不是写循环。

3 个答案:

答案 0 :(得分:2)

如果值大于0,您可以根据每个列构建一个基于CASE WHEN或IF的字符串。

例如:

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

答案 1 :(得分:1)

MySQL有两种可能性,我可以想到哪些是CASEIF语句,例如以下

SELECT
id, 
case
 when a.column1 > 0 then 'column1'
 else null
end AS col1,
case
 when a.column2 > 0 then 'column2'
 else null
end AS col2
FROM table_a a;

SELECT 
id, 
IF(column1 > 0, 'column 1', 'null') as col1,
IF(column2 > 0, 'column 2', 'null') as col2
FROM table_a a;

答案 2 :(得分:0)

这就是你想知道的:

create table TT(col1 int,col2 int,col3 int);

insert into TT values(1,0,1);
insert into TT values(4,0,5);
insert into TT values(1,0,3);
insert into TT values(1,0,0);

select distinct
   'col1' as 'Column contains values >1'
from 
    TT
where 
    col1 > 0

union

select distinct
    'col2'  as 'Column contains values >1'
from 
    TT
where 
    col2 > 0

union

select distinct
    'col3'  as 'Column contains values >1'
from 
    TT
where  
    col3 > 0;

结果:

+---------------------------+
| Column contains values >1 |
+---------------------------+
| col1                      |
| col3                      |
+---------------------------+

因为col1和col3的值大于0,您可以根据自己的喜好自定义查询