ホームページ >データベース >mysql チュートリアル >グループ化されたクエリの複数の LEFT JOIN 後の GROUP_CONCAT での重複値を回避するにはどうすればよいですか?
グループ化されたクエリで複数の LEFT JOIN を使用した後の GROUP_CONCAT の重複値のトラブルシューティング
グループ化されたクエリで複数の GROUP_CONCAT
とともに LEFT JOIN
を使用すると、値が重複する可能性があります。 これは、3 番目の LEFT JOIN
がユーザー ID にリンクされた各 (タグ、カテゴリ) の組み合わせに対して複数の行を導入する場合によく発生します。 後続の GROUP BY
は、GROUP_CONCAT
の結果内に重複する (ユーザー ID、タグ) と (ユーザー ID、カテゴリ) のペアを生成します。
いくつかの戦略でこの重複に対処できます。
DISTINCT
内で GROUP_CONCAT
を使用する: DISTINCT
関数内に GROUP_CONCAT
を追加すると、各連結リスト内の重複する値が直接削除されます。
順次 LEFT JOIN
アプローチ: LEFT JOIN
を順番に実行します。まず、ユーザー テーブルをタグ テーブルと結合し、結果をグループ化します。次に、この中間結果をカテゴリ テーブルと LEFT JOIN
して、再度グループ化します。これにより、各ユーザー ID に個別のタグとカテゴリの組み合わせが含まれる 1 つの行が確保されます。
スカラー サブクエリの利用: SELECT
句内でスカラー サブクエリを利用して、ユーザー ID ごとに独立して GROUP_CONCAT
値を計算し、ユーザーごとに 1 行を保証します。
対称 INNER JOIN
の利用: LEFT JOIN
の代わりに INNER JOIN
を使用します。ユーザー テーブルをタグ テーブルと結合し、ユーザー ID に基づいて別の INNER JOIN
を実行します。ユーザー テーブルとカテゴリ テーブルに対してこのプロセスを繰り返します。
最適なソリューションは、データ構造とクエリのパフォーマンスによって異なります。 最も効率的な方法を選択するには、クエリ プランと実行時間を分析することが重要です。
以上がグループ化されたクエリの複数の LEFT JOIN 後の GROUP_CONCAT での重複値を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。