簡體   English   中英

根據從中獲取的列名列表動態選擇列

[英]select columns dynamically based on list of column names obtained from

我需要執行一個簡單的select語句,但是基於動態的列名列表,並將其過濾為表中的小寫列名。 該表的結構不受我的控制,並且經常變化。 我不可能事先知道任何列名-只有大寫名稱(不需要)和小寫名稱(想要)。

桌子:

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           |
+---------------------------------+

您可以使用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' );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM