【问题标题】:In MySql convert resulted row from query to comma-separated string在 MySql 中将结果行从查询转换为逗号分隔的字符串
【发布时间】:2026-01-19 16:15:02
【问题描述】:

我想将选择查询的结果行转换为逗号分隔的字符串。我有一个表,其中有 153 列。选择查询如下

SELECT * FROM mytable where id = 3

我想要以逗号分隔的字符串中的所有结果 153 列。 MySql有什么技巧吗?

【问题讨论】:

标签: mysql sql


【解决方案1】:

您可以使用GROUP_CONCAT 函数来做到这一点。

SELECT GROUP_CONCAT(col1, col2,..coln) FROM my_table;

编辑:

使用以下查询获取所有列名以及CONCAT_WS 函数中的替换::

SELECT GROUP_CONCAT(COLUMN_NAME) 
FROM information_schema.COLUMNS 
WHERE TABLE_NAME = 'my_table';

SELECT CONCAT_WS(',', col1, col2, ..., coln) 
FROM my_table;

或尝试:

SET @query1 = CONCAT('
        SELECT CONCAT_WS(",", ',(SELECT GROUP_CONCAT(COLUMN_NAME)
                                 FROM information_schema.COLUMNS
                                 WHERE TABLE_NAME = 'my_table'),')
        FROM    tablew_name'
        );
PREPARE stmt FROM @query1; EXECUTE stmt; DEALLOCATE PREPARE stmt;

【讨论】:

  • Group_concat() 将给出多行的结果,而不是多个comumns。
  • @Fluffeh - 是的,我想用逗号分隔单行的列(使用 where 子句)
  • @hemu 没关系,我误读了这个问题。以为您想要一个字段中每行的所有列。
  • k...您的解决方案似乎有效。我正在尝试这个 - SELECT GROUP_CONCAT(COLUMN_NAME) INTO @cols FROM information_schema.COLUMNS WHERE TABLE_NAME = 'myTable'; SELECT CONCAT_WS(',', @cols) FROM myTable WHERE id = 3; 但这给了我逗号分隔的列名称。不是价值观...有什么帮助吗?
  • 你需要将所有这些列复制到 CONCAT_WS 函数以进行新查询,并且不要忘记接受答案。
【解决方案2】:

您可以使用concat() 函数,但据我所知,您需要为每一列命名。

select concat(col1, ',', col2, ',', col3) from myTable where id=3

我知道获取表的所有列的唯一方法是SHOW COLUMNS FROM table,我想您可以将结果包含在您的查询中,但这不是我以前做过的事情。

【讨论】:

  • 是的,这会起作用,但我会在触发器中写下来。因此,假设 2 个月后将添加一个新列,我将需要编辑触发代码。这就是为什么不建议使用列名的原因。
  • @hemu 不用担心,从这个问题来看,我不确定您的知识水平。当我看到它时,我回答了这个问题:)