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
我想请求您的帮助以实现以下目标 我有一个 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