gpt4 book ai didi

mysql - 如何在 MySQL 中使用 GROUP BY 和 JOIN 更新每个分组行?

转载 作者:行者123 更新时间:2023-11-29 12:12:03 24 4
gpt4 key购买 nike

我创建了一个 SQL Fiddle来说明我想在这里做什么。我有一个名为“项目”的表,其中包含个人信息和聚合信息。有一个名为“keycode”的列,它代表该项目的单独数据。有一个名为“promo”的列,用于将事物分组在一起。

我还有另一列名为“keycodes”(注意 S)的列,我希望其中包含同一促销事件的以逗号分隔的键码列表。

例如,如果有三行带有促销“A”,并且“keycode”列的各个值是 ABC、DEF 和 GHI,那么我希望所有这三行具有相同的值“键码”列。即: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 |
+----+---------+-------------+-------+

最佳答案

使用此更新查询来实现所需的结果:-

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;

关于mysql - 如何在 MySQL 中使用 GROUP BY 和 JOIN 更新每个分组行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30485808/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com