2017-03-06 32 views
0

我必須How to use GROUP BY to concatenate strings in MySQL?類似的問題,但在這個例子中爲mytable如何連接字符串到基於組的新列BY

id string aggr 
1   A NULL 
1   B NULL 
2   F NULL 

不同的是,我需要更新表得到這個結果:

id string aggr 
1   A A|B| 
1   B A|B| 
5   C C|E|C| 
5   E C|E|C| 
5   C C|E|C| 
2   F F| 

至於導致相同id我們有相同的newcolumn值。

在字符串的最後添加一個分隔符|絕對沒問題。這樣我可以更快地計算newcolumn中有多少「物品」,因爲最後(僅在兩者之間)的缺席而不添加+1。當我在aggr列中追加另外一兩個部分時,我也不會在乎驗證(如果我之前有管道)。

謝謝。

+0

你確實需要更新一個表,或只顯示在視圖中的結果?您可以使用group_concat將多個行合併爲1,並實際使用計數函數來計算給定ID的字符串數量。 – xQbert

+0

是的,我需要更新一個表格。是的,我知道表格會有冗餘數據。 – Haradzieniec

回答

2

你可以試試這個查詢:

UPDATE my_table t 
SET aggr = (
    SELECT * FROM (
     SELECT CONCAT(GROUP_CONCAT(t2.string SEPARATOR '|'), '|') 
     FROM my_table t2 
     WHERE t2.id = t.id 
    ) AS X 
) 
+0

對不起,但我得到一個SQL錯誤(1093):表't'被指定兩次,既作爲'UPDATE'的目標,也作爲數據的單獨來源。 – Haradzieniec

+0

你能給我你運行的查詢嗎? –

+0

與你的一樣(使用這些列名創建一個my_table表)。謝謝。 – Haradzieniec

1

你可以一個GROUP_CONCAT加入了對原始表

select a.id, a.string , b.aggr 
from my_table a 
inner join (
    select id, group_concat(string SEPARATOR '|') as aggr 
    from my_table 
    group by id 
) b on a.id = b.id 
+0

對不起,它是SELECT,但在問題中提出了UPDATE。謝謝。 – Haradzieniec