9

これは可能ですか?

Customers と Orders の 2 つのテーブルがあります。ここで、Customers の列に、その顧客のすべての注文 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

おそらく私のケースがより複雑だったため(複数の結合が必要だったため)、ここで与えられた回答はどれもうまくいきませんでした。そのため、デニスのソリューションを使用しましたが、一時テーブルに分割しました。

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 を試す代わりに、ネストされたクエリ アプローチを使用できます。このクエリを試してください。うまくいけば、これで作業が正しく行われるはずです。

UPDATE customers AS c
SET c.orders =
(SELECT GROUP_CONCAT(DISTINCT o.orderid)
 FROM オーダー AS o
 WHERE o.customerid = c.customerid
 GROUP BY o.customerid);

このクエリを 1 回試してから、さらに問題が発生するかどうかをお知らせください。

シヴァ

于 2012-06-18T12:49:28.107 に答える
0

GROUPBY句を指定するのを忘れています。

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 に答える