【问题标题】:select list of columns dynamically in MySQL在 MySQL 中动态选择列列表
【发布时间】:2016-03-24 14:05:14
【问题描述】:

我浏览了这个网站和其他网站上的很多帖子,但我无法弄清楚这一点。我正在尝试从表中选择列列表,然后在类似于以下的查询中使用它们:

set @cols = (select group_concat(column_name) as 'col_list' FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE (`TABLE_SCHEMA` = 'REPORTS' AND `TABLE_NAME` = 't_labor' AND column_name like '%host%'));

set @s = 'select ' + @cols + ' from REPORTS.t_labor';

prepare stmt from @s;
execute stmt;
deallocate prepare stmt;

-- execute ('select ' + @cols + ' from REPORTS.t_sales');

我正在尝试按原样运行上述语句。我也尝试过创建一个存储过程,但我以前从未在 MySQL 中使用过存储过程,也不知道如何调试它们。如果可能,我宁愿在不使用存储过程的情况下执行此操作,但如果有必要,也可以。

我尝试使用 prepare 语句,也尝试了 execute 语句,但都无法正常工作。

【问题讨论】:

    标签: mysql select stored-procedures execute dynamic-columns


    【解决方案1】:

    在这里猜测一下,但试试这个。

    set @cols = (select group_concat(column_name) as 'col_list' FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE (`TABLE_SCHEMA` = 'REPORTS' AND `TABLE_NAME` = 't_labor' AND column_name like '%host%'));
    
    PREPARE stmt1 FROM 'select ? from REPORTS.t_labor';
    
    EXECUTE stmt1 USING @cols;
    
    DEALLOCATE PREPARE stmt1;
    

    【讨论】:

    • 我运行了它,它返回了结果集每一行的列名列表,而不是实际数据。但我认为我们必须接近。
    【解决方案2】:

    终于明白了:

        set @cols = (select group_concat(column_name) as 'col_list' FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE (`TABLE_SCHEMA` = 'REPORTS' AND `TABLE_NAME` = 't_labor' AND column_name like '%host%'));
    
    set @qry = concat('select ', @cols, ' from REPORTS.t_labor');
    
    PREPARE stmt1 FROM @qry;
    
    EXECUTE stmt1;
    
    DEALLOCATE PREPARE stmt1;
    

    必须将至少 5 个与此问题类似的不同帖子的回复以及 OSWaldo 博士的回复拼凑起来。

    【讨论】:

    • 很高兴你成功了 ;-)
    猜你喜欢
    • 1970-01-01
    • 2012-07-26
    • 2014-04-28
    • 2019-10-11
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多