2016-09-17 52 views
1

我想請求您的幫助以實現以下目標 我有一個表格,id列可能在多行上具有相同的id,這些id對應於另一列上的不同值像的示例波紋管多行數值到MySQL中的一個單元格

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

如何才能做到這一點?

+0

使用'group_concat()'在結果集中實現這一點,但從不保存數據t他的想法。請參閱[Junction Tables](http://stackoverflow.com/a/32620163)如果您有意這樣做 – Drew

+0

[可以將多個MySQL行連接成一個字段嗎?](http:// stackoverflow的.com /問題/ 276927 /罐-i的接續模式-多的MySQL-行成 - 一場) – Drew

回答

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 
0

可以使用GROUP_CONCAT

select id, group_concat(value1) as value2 
from table1 
group by id 
相關問題