ホームページ  >  記事  >  データベース  >  MySQL で GROUP_CONCAT と LEFT JOIN を使用して関連ソリューションを使用してチケットごとに個別の行を取得する方法

MySQL で GROUP_CONCAT と LEFT JOIN を使用して関連ソリューションを使用してチケットごとに個別の行を取得する方法

Susan Sarandon
Susan Sarandonオリジナル
2024-10-26 10:05:29855ブラウズ

How to Retrieve Separate Rows for Each Ticket with Associated Solutions Using GROUP_CONCAT and LEFT JOIN in MySQL?

MySQL: LEFT JOIN による GROUP_CONCAT の結合

MySQL では、GROUP_CONCAT 関数を LEFT JOIN と組み合わせて使用​​して、複数のテーブルからデータを取得できます。ただし、正しく使用しないと、パフォーマンスの問題が発生する可能性があります。

問題ステートメント

チケット (チケット) とソリューション (ソリューション) のテーブルを含むヘルプ デスク データベースを考えてみましょう。次のステートメントを使用して、対応するソリューション エントリを持つすべてのチケットを取得するクエリが作成されます。

<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 行を返します。これは、チケットごとに関連するソリューションを含む個別の行が必要であるため、意図したものではありません。

解決策

この問題に対処するには、クエリを次のように変更できます。

<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>

この改訂されたクエリでは、LEFT JOIN 句のサブクエリは、適切なグループ内の GROUP_CONCAT を使用して、各チケットの結合されたソリューションを取得します。次に、外側のクエリは、ticket_id フィールドを使用して、この結果をメインの Tickets テーブルと結合します。

代替ソリューション

別のアプローチは、ネストされたクエリ innerhalb der Haupt-SELECT-Anweisung:

<code class="sql">SELECT t.*,
       (SELECT GROUP_CONCAT(s.soution)
        FROM SOLUTIONS s
        WHERE s.ticket_id = t.ticket_id) AS combinedsolutions
FROM TICKETS t</code>
このアプローチは、外側の SELECT ステートメント内に GROUP_CONCAT クエリを埋め込むことで同じタスクを実行します。

これらの変更のいずれかを利用することで、クエリはチケットごとに個別の行を正しく取得できるようになります。チケット情報とそのチケットに対応するソリューションを含む行。

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

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