【问题标题】:select columns dynamically based on list of column names obtained from根据从获得的列名列表动态选择列
【发布时间】:2013-08-07 13:50:25
【问题描述】:

我需要做一个简单的选择语句,但基于一个动态的列名列表,并过滤为表中的小写列名。表结构超出了我的控制范围,并且经常变化。我不可能事先知道任何列名 - 只有大写名称(不需要)和小写名称(需要)。

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

【问题讨论】:

    标签: mysql group-concat


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2019-10-11
      • 2019-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-10
      • 1970-01-01
      • 2018-11-20
      相关资源
      最近更新 更多