MySQL:使用JOIN和GROUP_CONCAT更新

时间:2011-05-23 16:08:05

标签: 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)

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

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

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

基本上你不应该以这种方式使用 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);

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

希瓦

答案 3 :(得分:0)

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