GROUP_CONCAT を使用して MySQL で複数の子行を 1 つの行に結合するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-27 14:14:10
オリジナル
501 人が閲覧しました

How Can I Combine Multiple Child Rows into a Single Row in MySQL Using GROUP_CONCAT?

MySQL での統合ビューの子行の結合

問題:

テーブルの複数の子行を 1 つのテーブルに結合する別のテーブルの単一行を作成することは、データベース管理の一般的なタスクです。次のシナリオを考えてみましょう:

  • Ordered_Item と Ordered_Options という 2 つのテーブルが存在します。
  • Ordered_Item には項目名が含まれます。
  • Ordered_Options には各項目に関連付けられたオプションが含まれます。

必要な出力は、項目名とそれに対応するオプションを組み合わせたテーブルです。 Ordered_Options テーブル内の順序が異なる場合でも、特定の順序を使用できます。

解決策:

このタスクに対する効果的なアプローチの 1 つは、MySQL の GROUP_CONCAT 関数を使用することです。この関数を使用すると、複数の行の値を 1 つの文字列に連結できます。

次のクエリは、GROUP_CONCAT の使用方法を示しています。

SELECT
  Ordered_Item.ID AS `Id`,
  Ordered_Item.Item_Name AS `ItemName`,
  GROUP_CONCAT(Ordered_Options.Value) AS `Options`
FROM
  Ordered_Item
INNER JOIN
  Ordered_Options ON Ordered_Item.ID = Ordered_Options.Ordered_Item_ID
GROUP BY
  Ordered_Item.ID
ログイン後にコピー

出力:

このクエリは次のテーブルを返します。列:

Id ItemName Options
1 Pizza Pepperoni, Extra Cheese
2 Stromboli Extra Cheese

オプション列には、各項目のオプションが希望の順序で統合されます。

追加の考慮事項:

  • デフォルトでは、MySQL は GROUP_CONCAT 結果の最大長を 1024 文字に制限します。オプションがこの制限を超える場合は、SET SESSION group_concat_max_len ステートメントを使用してサイズを増やすことができます。
  • 出力内のオプションの順序は、クエリの実行中に処理される行の順序によって異なる場合があります。一貫した順序が重要な場合は、オプションを取得するサブクエリで ORDER BY 句を使用することを検討してください。

以上がGROUP_CONCAT を使用して MySQL で複数の子行を 1 つの行に結合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート