ホームページ >データベース >mysql チュートリアル >MySQL で GROUP_CONCAT と LEFT JOIN を正しく使用してチケットごとにソリューションを連結する方法は?
LEFT JOIN を使用した MySQL GROUP_CONCAT の問題と解決策
MySQL では、グループ内の複数の行の文字列を連結するために GROUP_CONCAT 関数が一般的に使用されます。 。ただし、この関数を LEFT JOIN とともに使用すると、複数の行が分離されずに 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 サイトの他の関連記事を参照してください。