MySQL中的一个单元格有多行值

时间:2016-09-17 20:50:43

标签: mysql denormalization

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

表#1

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

基于id列,我需要在同一个单元格中输入相同id的值,并用逗号分隔,如下例所示

那些需要在另一张桌子上更新

表#2

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

如何做到这一点?

2 个答案:

答案 0 :(得分:1)

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

无论如何,因为这个答案也应该包括一个解决方案,这里有一个:

使用GROUP_CONCAT()聚合函数:

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

更新其他ID匹配的表格中的结果:

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

答案 1 :(得分:0)

你可以使用group_concat

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