MySQL 中一个单元格的多行值

Multiple rows values to one cell in MySQL

我想请求您的帮助以实现以下目标 我有一个 table id 列可能在多行上具有相同的 id,这对应于另一列上的不同值,例如下面的示例

TABLE#1

+-----+---------+
| id1 | value1  | 
+-----+---------+
|  1  |    1    | 
+-----+---------+
|  1  |    2    | 
+-----+---------+
|  1  |    3    | 
+-----+---------+
|  2  |    4    | 
+-----+---------+
|  2  |    5    | 
+-----+---------+
|  2  |    6    | 
+-----+---------+

基于 id 列,我需要将对应于相同 id 的值输入到同一个单元格中,用逗号分隔,如下例

那些需要在另一个上更新 table

TABLE#2

+-----+---------+
| id2 | value2  | 
+-----+---------+
|  1  |  1,2,3  | 
+-----+---------+
|  2  |  4,5,6  | 
+-----+---------+

如何做到这一点?

你可以使用 group_concat

select id, group_concat(value1) as value2
from table1
group by id

对数据进行反规范化并违反第一范式 (1NF) 的原因是什么?你不应该那样做 - 最好将数据标准化。如果需要以这种方式呈现数据,您可以创建一个视图。


无论如何,既然这个答案也应该包括一个解决方案,这里是一个:

使用GROUP_CONCAT()聚合函数:

SELECT id1, GROUP_CONCAT(value1 ORDER BY value1 ASC SEPARATOR ',')
FROM table1
GROUP BY id1

要在 ID 匹配的其他 table 中更新结果:

UPDATE table2 a
INNER JOIN ( 
  SELECT id1, GROUP_CONCAT(value1 ORDER BY value1 ASC SEPARATOR ',') AS value2
  FROM table1
  GROUP BY id1
  ) b ON a.id1 = b.id2
SET a.value2 = b.value2