在 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中文網其他相關文章!