MySQL:使用JOIN和GROUP_CONCAT更新

Dyl*_*lan 6 mysql join group-concat mysql-error-1111

这可能吗?

我有2个表,客户和订单.现在,我想在客户中填写该客户的所有订单ID(以逗号分隔).

我试过这样的东西,但它不起作用:

UPDATE customers AS c
LEFT JOIN orders AS o ON o.customerid=c.customerid
SET c.orders = GROUP_CONCAT(DISTINCT o.orderid)
Run Code Online (Sandbox Code Playgroud)

我得到'无效使用群组功能'.

PS.我知道总是在SELECT/JOIN中动态获取GROUP_CONCAT值会更好,但我只是想知道我是否可以用某种方式填充这个列.

小智 8

您需要在group_concat中添加订单,如下例所示

注意:group_concat(版本ORDER BY版本SEPARATOR',')

UPDATE 
items i,
(SELECT pduid, group_concat(version ORDER BY version SEPARATOR ',') AS 'versions'
     from items GROUP BY pduid) AS version_lookup
SET i.versions = version_lookup.versions
WHERE version_lookup.pduid = i.pduid
Run Code Online (Sandbox Code Playgroud)


Mar*_*ing 5

这里给出的答案都不适合我,可能是因为我的情况更复杂(我需要多个连接),所以我使用了 Dennis 的解决方案,但将其拆分为一个临时表:

CREATE TEMPORARY TABLE version_lookup
SELECT pduid, group_concat(version ORDER BY version SEPARATOR ',') AS 'versions'
     from items GROUP BY pduid;

UPDATE 
items i, version_lookup
SET i.versions = version_lookup.versions
WHERE version_lookup.pduid = i.pduid;
Run Code Online (Sandbox Code Playgroud)


Pen*_*m10 -1

您忘记告诉 GROUP BY 子句。

UPDATE customers AS c
LEFT JOIN orders AS o ON o.customerid=c.customerid
SET c.orders = GROUP_CONCAT(DISTINCT o.orderid)
GROUP BY o.customerid
Run Code Online (Sandbox Code Playgroud)

  • 我不认为这是问题所在。您可以使用 GROUP_CONCAT 而不指定 GROUP BY。另外,当我尝试这样做时,它仍然给出错误。 (2认同)