如何在 MySQL 中使用 GROUP_CONCAT 和 LEFT JOIN 檢索每個工單的單獨行以及相關解決方案?

Susan Sarandon
發布: 2024-10-26 10:05:29
原創
853 人瀏覽過

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 結合使用,從多個表格中擷取資料。但是,如果使用不當,用戶可能會遇到效能問題。

問題陳述

考慮一個幫助台資料庫,其中包含票證(Tickets)和解決方案(Solutions)表。使用以下語句編寫一個查詢來檢索所有票證及其相應的解決方案條目:

<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>
登入後複製

此查詢返回一行,其中包含第一個票證中的信息以及兩個票證中的所有解決方案。這是無意的,因為我們希望每張票證都有單獨的行及其相關的解決方案。

解決方案

要解決此問題,可以如下修改查詢:

<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 表連接起來。

替代解決方案

另一種方法是使用巢狀查詢insidehalb 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!