2015-05-27 18 views
0

我創建了一個SQL Fiddle來說明我想在這裏做什麼。我有一個名爲「項目」的表格,其中包含個人信息和彙總信息。有一個名爲「keycode」的列表示該項目的單個數據片段。有一個名爲「促銷」的專欄,用於將事情分組在一起。如何在MySQL中使用GROUP BY和JOIN更新每個分組行?

我還有另一個名爲「keycodes」(注意S)的列,我想要包含同一個促銷的鍵碼的逗號分隔列表。因此,例如,如果有三行帶有促銷「A」,並且它們對於「keycode」列的各個值是ABC,DEF和GHI,那麼我會將這三行中的所有三行的值設爲相同的值爲「keycodes」列。即:ABC,DEF,GHI

我試着用UPDATE語句來做這件事;然而,這僅更新分組行一個

UPDATE items i 
INNER JOIN (
    SELECT keycode, GROUP_CONCAT(keycode SEPARATOR ',') AS keycodes 
    FROM items 
    WHERE promo IS NOT NULL 
    GROUP BY promo 
) AS t ON i.keycode = t.keycode 
SET i.keycodes = t.keycodes; 

所以在我SQL Fiddle,該行與ID爲1和4正確更新(和技術上5太多,但只是因爲它只有一個值)。但是,ID爲2,3和6的行沒有我想要的值。

這是可以在MySQL中完成的事情嗎?

所需的輸出:

+----+---------+-------------+-------+ 
| id | keycode | keycodes | promo | 
+----+---------+-------------+-------+ 
| 1 | ABC  | ABC,DEF,GHI | A  | 
| 2 | GHI  | ABC,DEF,GHI | A  | 
| 3 | DEF  | ABC,DEF,GHI | A  | 
| 4 | QRS  | QRS,TUV  | B  | 
| 5 | WXY  | WXY   | C  | 
| 6 | TUV  | QRS,TUV  | B  | 
+----+---------+-------------+-------+ 

回答

1

使用此更新查詢以獲得期望的結果: -

UPDATE items i 
INNER JOIN (
      SELECT keycode, GROUP_CONCAT(keycode SEPARATOR ',') AS keycodes, promo 
      FROM items 
      WHERE promo IS NOT NULL 
      GROUP BY promo 
      ) AS t ON i.promo = t.promo 
SET i.keycodes = t.keycodes;