用于获取非空列名的MYSQL查询

时间:2013-09-17 11:07:34

标签: mysql sql

我正在尝试根据我给出的名称获取非空的coloumns名称。

我的数据库看起来像这样

name user p1 p2 p3 p4 
test ravi 21 22 
test jan 56 75 
ravi test       56 75 
ravi test       75 34 

因此,当我选择名称作为ravi时,它应该给我颜色名称p1,p2的输出(不应该显示空颜色),如果我给ravi它应该显示p1,p2 coloumns名称而不是值。

这里我尝试了我的查询。

SELECT `COLUMN_NAME` 
FROM `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE `TABLE_SCHEMA`='test' 
AND `TABLE_NAME`='details' 
AND column_name LIKE 'Q%' 
AND is_nullable = 'NO' 
AND 'user'='test'; 

所以任何人都可以帮我解决这个问题

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您需要非NULL列名列表。您可以使用concat()

执行此操作
select `user`,
       ws_concat(',',
                 (case when p1 is not null then 'p1' else '' end),
                 (case when p2 is not null then 'p2' else '' end),
                 (case when p3 is not null then 'p3' else '' end),
                 (case when p4 is not null then 'p4' else '' end)
                ) as NonNullColumns
from t
where `user` = 'ravi';

SQL语句必须具有明确定义的列。因此,您不能将每个列名称放在单独的列中 - 那么您需要在结果集中使用可变数量的列( not 允许)。