我需要做一个简单的select语句,但是基于一个动态的列名列表并过滤到表中的小写列名。表结构不受我的控制,并且经常变化。我不可能事先知道任何列名 - 只有UPPER CASE名称(不需要)和小写名称(想要)。
the_table:
COL_UPPERCASE_1 COL_UPPERCASE_2 col_lowercase_1 col_lowercase_2
data1 data2 data3 data4
data5 data6 data7 data8
我可以使用这个获得我想要的列名列表:
select group_concat(column_name) FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE (`TABLE_SCHEMA` = 'the_database' AND `TABLE_NAME` = 'the_table' AND column_name = BINARY LOWER(column_name));
返回我想要的列列表:
+---------------------------------+
| group_concat(column_name) |
+---------------------------------+
| col_lowercase_1,col_lowercase_2 |
+---------------------------------+
我的问题:如何有效地将该查询的结果插入到我的select语句中? E.g。
select <column list from above "select group_concat..." query> from my_table;
具体来说,在上面的例子中,我想要相当于:
select col_lowercase_1,col_lowercase_2 from the_table;
返回:
+---------------------------------+
| col_lowercase_1 col_lowercase_2 |
+---------------------------------+
| data3 data4 |
| data7 data8 |
+---------------------------------+
答案 0 :(得分:0)
您可以使用exec()
从某些文本
E.g。
declare @Columns VARCHAR(8000);
select @Columns = select group_concat(column_name) FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE (`TABLE_SCHEMA` = 'the_database' AND `TABLE_NAME` = 'the_table' AND column_name = BINARY LOWER(column_name));
exec ( 'select ' + @columns ' from the_table' );