繁体   English   中英

MySQL:使用JOIN和GROUP_CONCAT更新

[英]MySQL: UPDATE with a JOIN and a GROUP_CONCAT

这可能吗?

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

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

UPDATE customers AS c
LEFT JOIN orders AS o ON o.customerid=c.customerid
SET c.orders = GROUP_CONCAT(DISTINCT o.orderid)

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

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

您需要在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

这里没有给出的答案对我有用,可能是因为我的案例更复杂(我需要多个连接),所以我使用了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;

基本上你不应该以这种方式使用GROUP_CONCAT函数,这不是完成工作的正确方法。

在这种情况下,您可以使用嵌套查询方法而不是尝试使用JOIN,如下所示,尝试此查询,希望这应该正确地完成您的工作。

UPDATE customers AS c
SET c.orders = 
(SELECT GROUP_CONCAT(DISTINCT o.orderid) 
 FROM orders AS o 
 WHERE o.customerid = c.customerid 
 GROUP BY o.customerid);

尝试此查询一次,如果您遇到任何其他问题,请告诉我们。

湿婆

你忘了告诉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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM