MySQL:使用JOIN和GROUP_CONCAT进行UPDATE

|| 这可能吗? 我有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
    
基本上,您不应该以这种方式使用GROUP_CONCAT函数,这不是使工作完成的正确方法。 在这种情况下,您可以使用嵌套查询方法,而不是像下面指定的那样尝试使用JOIN,请尝试执行此查询,希望此方法可以正确完成您的工作。 更新客户AS c SET c.orders = (选择GROUP_CONCAT(DISTINCT o.orderid)  从订单AS o  在哪里o.customerid = c.customerid  o.customerid的分组); 尝试一次此查询,然后让我知道您是否还有其他问题。 西瓦     

bab

此处给出的答案均不适合我,可能是因为我的情况更复杂(我需要多个联接),所以我使用了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 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
    

要回复问题请先登录注册