[英]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.