【问题标题】:Multiple rows values to one cell in MySQLMySQL中一个单元格的多行值
【发布时间】:2017-01-25 20:53:59
【问题描述】:

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

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

如何做到这一点?

【问题讨论】:

标签: mysql denormalization


【解决方案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

【讨论】:

    【解决方案2】:

    你可以使用 group_concat

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

    【讨论】:

      猜你喜欢
      • 2017-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多