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