2013-08-07 38 views
0

獲取的列名稱列表動態地選擇列我需要做一個簡單的select語句,但是基於動態列名稱列表並且過濾爲表格中的小寫字母列名稱。表格結構超出了我的控制範圍,並且經常發生變化。我不可能在手之前知道任何列名 - 只有有大寫名(不需要)和小寫名(想要)。根據從

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語句中?例如。

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

您可以使用exec()從一些文本運行查詢

例如

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');