MySQL LEFT JOIN を使用した GROUP_CONCAT: 対応するソリューション エントリの検索
MySQL のようなリレーショナル データベースを扱う場合、複数のテーブルにわたって集計されたデータを取得するには注意が必要です考慮。 GROUP_CONCAT 関数は、複数の行のデータを 1 つの文字列に連結するための貴重なツールです。
このシナリオの目標は、2 つのテーブル「チケット」と「ソリューション」から、すべてのチケットとそれに関連付けられたソリューションを取得することです。 「ticket_id」列でリンクされています。ただし、提供された SELECT ステートメントは、複数のチケットのソリューションを 1 つの行にマージしています。
この問題を解決するには、GROUP_CONCAT 関数内でサブクエリまたは相関サブクエリを使用する必要があります。ここでは 2 つのアプローチを示します。
サブクエリの使用:
<code class="mysql">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>
相関サブクエリの使用:
<code class="mysql">SELECT t.*, (SELECT GROUP_CONCAT(s.solution) FROM SOLUTIONS s WHERE s.ticket_id = t.ticket_id) AS combinedsolutions FROM TICKETS t</code>
このサブクエリのアプローチを採用することで、結果セットの各行にはチケット ID に対応するソリューションのみが含まれるようになります。サブクエリは、チケット ID に基づいてソリューションを集約し、それらを 1 つの文字列に連結し、その後、「LEFT JOIN」を使用してメインの「Tickets」テーブルと結合します。
この改訂されたアプローチにより、各チケット行が独自のものを持つことが保証されます。一連のソリューションを使用して、目的の出力を提供します:
id: 1 requester_name: John Doe description: My computer is not booting. combinedsolutions: I tried to solve this but was unable to. I will pass this on to Technician B since he is more experienced than I am.,I reseated the RAM and that fixed the problem. id: 2 requester_name: Jane Doe description: My browser keeps crashing. combinedsolutions: I was unable to figure this out. I will again pass this on to Technician B.,I re-installed the browser and that fixed the problem.
このアプローチを適用すると、すべてのチケットとそれに関連するソリューションを効果的に抽出でき、データの整合性が維持され、すべてのサポート チケットとそのチケットの明確なビューが提供されます。決議。
以上がMySQL LEFT JOIN で GROUP_CONCAT を使用して、各チケットに対応するソリューションを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。