MySQL连接所有列

时间:2014-04-28 18:06:23

标签: mysql database

为什么我们不能使用*关键字在MySQL中连接?

SELECT concat(*) FROM table

SELECT group_concat(*) FROM table

有没有其他方法可以在不明确使用列名的情况下访问列中的值?

1 个答案:

答案 0 :(得分:26)

要连接表格中的所有列,您不能使用*关键字,但需要明确列出所有列:

SELECT CONCAT(col1, col2, col3, ....)
FROM yourtable

或者您可能希望使用将跳过空值的CONCAT_WS

SELECT CONCAT_WS(',', col1, col2, col3, ....)
FROM yourtable

如果您不想手动指定所有列名,可以使用dinamic查询。此查询将返回表的所有列名:

SELECT `column_name` 
FROM   `information_schema`.`columns` 
WHERE  `table_schema`=DATABASE() 
       AND `table_name`='yourtable';

并使用GROUP_CONCAT可以获得所有列名称的列表:

GROUP_CONCAT(CONCAT('`', column_name, '`'))

以逗号分隔格式引用:

`col1`,`col2`,`col3`,`col4`,...

所以现在我们有了所有的元素来创建我们的查询:

SELECT
  CONCAT(
    'SELECT CONCAT_WS(\'\',',
    GROUP_CONCAT(CONCAT('`', column_name, '`') ORDER BY column_name),
    ') AS all_columns FROM yourtable;')
FROM   `information_schema`.`columns` 
WHERE  `table_schema`=DATABASE() 
       AND `table_name`='yourtable'
INTO @sql;

此查询将@sql字符串设置为:

SELECT CONCAT_WS('', col1, col2, col3, ....) AS all_columns FROM yourtable

并且此代码将执行它:

PREPARE stmt FROM @sql;
EXECUTE stmt;

请参阅小提琴here