0

我对编写查询感到震惊。在这里,我想根据某些特定值显示列名

例如,我的表是这样的:

id  | fruits   |vegetables    |softdrink
-----------------------
1   | apple    | Onion        | Pepsi
2   | mango    | Potato       | Coke    
3   | banana   | Bringal      | RedBull

如果我有一个值“芒果”,那么我应该将列名作为水果或

如果我有一个值“RedBull”,那么我应该将列名作为 softdrink

注意:我在 48 左右有很多列,可以从其中任何一个中获取名称

4

2 回答 2

1
set @q= CONCAT('SELECT columns.column_name 
                from table inner 
                join information_schema.columns 
                on columns.table_schema = "dbname" 
                and columns.table_name = "table" 
                and ((',
                (SELECT GROUP_CONCAT(CONCAT('columns.column_name="',column_name,'"',' and table.',column_name,' = "value','"') SEPARATOR ' OR ')
                FROM INFORMATION_SCHEMA.COLUMNS 
                WHERE table_name = 'table'),
                '))');
prepare query from @q;
execute query;

这肯定有效..

呸!

小提琴:http ://sqlfiddle.com/#!2/9420c/2/2

PS:替换table为您的表名,dbname您的数据库名称和value您的值

于 2013-05-18T08:57:09.280 回答
-1

当您尽可能加密您的问题时,我只能猜测。

这张桌子闻起来设计不好。它应该像

 col  | value
 col1 | a
 col1 | b
 col2 | d

等等。

比您可以轻松地从价值中获取价值

于 2013-05-18T08:13:08.690 回答