9

这可能吗?

我有 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

4 回答 4

9

您需要在 group_concat 中添加 order by,如下例所示

注意:group_concat(version ORDER BY version 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
于 2012-08-26T04:33:35.127 回答
4

这里给出的答案都不适合我,可能是因为我的情况更复杂(我需要多个连接),所以我使用了 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;
于 2012-11-16T14:42:02.800 回答
3

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

在这种情况下,您可以使用嵌套查询方法而不是尝试使用我在下面指定的 JOIN,尝试此查询,希望这可以正确完成您的工作。

更新客户作为 c
SET c.orders =
(SELECT GROUP_CONCAT(DISTINCT o.orderid)
 从订单 AS o
 WHERE o.customerid = c.customerid
 GROUP BY o.customerid);

尝试此查询一次,然后让我知道您是否遇到更多问题。

湿婆

于 2012-06-18T12:49:28.107 回答
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
于 2011-05-23T16:10:29.950 回答