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

Barbara Streisand
發布: 2024-10-27 10:35:03
原創
541 人瀏覽過

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

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