在SELECT上将标签附加到*列

时间:2012-06-27 13:11:29

标签: mysql database

对于一栏来说,这很简单:

SELECT myColumn as 'My super sweet column', yourColumn FROM myTable;
# Results in:
# +-----------------------+------------+
# | My super sweet column | yourColumn |
# +-----------------------+------------+
# |                     1 |          0 |
# +-----------------------+------------+

我将如何实现......?

SELECT * as 'Random_'* FROM myTable;
# To result in:
# +-----------------+-------------------+
# | Random_myColumn | Random_yourColumn |
# +-----------------+-------------------+
# |               1 |                 0 |
# +-----------------+-------------------+

3 个答案:

答案 0 :(得分:2)

没有合理的方法可以做你想做的事。您必须列出所有列名及其别名。

答案 1 :(得分:1)

运行以下命令:

show columns from yourTable;

此查询的结果集的每一行代表一列,此结果集的第一列是列名。知道了这一点,您可以按顺序处理表的列并获取表的列的名称。使用表格列的名称,您可以生成查询。

如果要为所有运行的表生成此类查询

show tables;

并从yourTable命令处理运行show列的每个表(用表名替换yourTable)。

答案 2 :(得分:0)

可以使用information schema tables创建一个手动重命名每列的查询:

SELECT CONCAT('SELECT ', GROUP_CONCAT(
         '`',        REPLACE('`', '``', COLUMN_NAME), '` AS
          `Random_', REPLACE('`', '``', COLUMN_NAME), '`'
       ), ' FROM myTable') INTO @qry
FROM   INFORMATION_SCHEMA.COLUMNS
WHERE  TABLE_SCHEMA = 'myDB' AND TABLE_NAME = 'myTable';

此时,@qry包含字符串(为了便于阅读,我添加了空格除外):

SELECT `myColumn`   AS `Random_myColumn`,
       `yourColumn` AS `Random_yourColumn`
FROM   myTable

然后可以执行prepared

PREPARE stmt FROM @qry;

执行时:

EXECUTE stmt;

最后解除分配:

DEALLOCATE PREPARE stmt;

但是,您正在尝试执行此操作建议您的应用程序不知道myTable的架构(即它是动态的)。这是通常不良做法,可能表示您需要normalise您的数据结构。

此外,我不太明白为什么结果集中列的名称对您很重要,因为您的应用程序可以引用它们,但它希望如何?