ホームページ  >  記事  >  データベース  >  MySQL で GROUP_CONCAT と LEFT JOIN を正しく使用してチケットごとにソリューションを連結する方法は?

MySQL で GROUP_CONCAT と LEFT JOIN を正しく使用してチケットごとにソリューションを連結する方法は?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-27 10:35:03542ブラウズ

How to Correctly Use GROUP_CONCAT with LEFT JOIN in MySQL to Concatenate Solutions per Ticket?

LEFT JOIN を使用した MySQL GROUP_CONCAT の問題と解決策

MySQL では、グループ内の複数の行の文字列を連結するために GROUP_CONCAT 関数が一般的に使用されます。 。ただし、この関数を LEFT JOIN とともに使用すると、複数の行が分離されずに 1 つの行に結合される状況が発生する可能性があります。

問題ステートメント

次のシナリオを考えてみましょう:

  • ヘルプ デスク データベースを表す 2 つのテーブル、「チケット」と「ソリューション」
  • 各チケットには 1 つ以上の対応するソリューションがあります
  • 目標: 各チケットのすべてのソリューションを組み合わせるクエリを作成します

使用されるクエリ:

<code class="SQL">SELECT Tickets.*, GROUP_CONCAT(Solutions.solution) AS CombinedSolutions
FROM Tickets
LEFT JOIN Solutions ON Tickets.id = Solutions.ticket_id
ORDER BY Tickets.id;</code>

問題

これクエリは、チケット 1 の情報と、チケット 1 とチケット 2 の両方のソリューション エントリが連結された 1 行のみを返します。

ソリューション

この問題を解決するには、サブクエリまたはJOIN ステートメント内の派生テーブルを使用してチケット ID 別にソリューションをグループ化します:

解決策 1: サブクエリを使用する

<code class="SQL">SELECT t.*,
          x.combinedsolutions
     FROM TICKETS t
LEFT JOIN (SELECT s.ticket_id,
                  GROUP_CONCAT(s.solution) AS combinedsolutions
             FROM SOLUTIONS s 
         GROUP BY s.ticket_id) x ON x.ticket_id = t.ticket_id</code>

解決策 2: 派生テーブルを使用する

<code class="SQL">SELECT t.*,
          (SELECT GROUP_CONCAT(s.solution)
             FROM SOLUTIONS s 
            WHERE s.ticket_id = t.ticket_id) AS combinedsolutions
     FROM TICKETS t</code>

結合する前にソリューションをグループ化することで、クエリはチケットごとに個別の行を返し、対応するソリューションが 1 つの文字列に連結された状態で返されます。

以上がMySQL で GROUP_CONCAT と LEFT JOIN を正しく使用してチケットごとにソリューションを連結する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。