MySQL GROUP_CONCAT 與LEFT JOIN 問題及解決方案
在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 的資訊以及票證1 和票證2 的解決方案條目連接在一起。
解決方案
要解決此問題,請使用子查詢或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>
透過在加入之前對解決方案進行分組,查詢現在為每張票證傳回單獨的行,並將其對應的解決方案連接成一個字串。
以上是如何在 MySQL 中正確使用 GROUP_CONCAT 和 LEFT JOIN 來連接每個工單的解決方案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!