首页  >  文章  >  数据库  >  如何在 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