0

对于一列,它很简单:

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

3 回答 3

2

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

于 2012-06-27T13:15:08.423 回答
1

运行以下命令:

show columns from yourTable;

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

如果要为所有运行的表生成这种查询

show tables;

并处理从 yourTable 命令运行显示列的每个表(将 yourTable 替换为表名)。

于 2012-06-27T13:36:07.430 回答
0

可以使用信息架构表来创建手动重命名每列的查询:

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

然后可以准备执行:

PREPARE stmt FROM @qry;

执行:

EXECUTE stmt;

最后解除分配:

DEALLOCATE PREPARE stmt;

但是,您正在寻求这样做的事实表明您的应用程序不知道的模式myTable(即它是动态的)。这通常是不好的做法,并且可能表明您需要规范化数据结构。

此外,我不太明白为什么结果集中的列名对您很重要,因为您的应用程序可以根据需要引用它们?

于 2012-06-27T13:35:48.483 回答