这可能吗?
我有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值,但我只是想知道我是否可以用某种方式填充这个列。
答案 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