首頁  >  文章  >  資料庫  >  如何在 MySQL 中正確使用 GROUP_CONCAT 和 LEFT JOIN 來連接每個工單的解決方案?

如何在 MySQL 中正確使用 GROUP_CONCAT 和 LEFT JOIN 來連接每個工單的解決方案?

Barbara Streisand
Barbara Streisand原創
2024-10-27 10:35:03542瀏覽

How to Correctly Use GROUP_CONCAT with LEFT JOIN in MySQL to Concatenate Solutions per Ticket?

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn