如何在 MySQL 中使用 GROUP_CONCAT 和 LEFT JOIN 检索每个工单的单独行以及相关解决方案?

Susan Sarandon
发布: 2024-10-26 10:05:29
原创
853 人浏览过

How to Retrieve Separate Rows for Each Ticket with Associated Solutions Using GROUP_CONCAT and LEFT JOIN in MySQL?

MySQL:使用 LEFT JOIN 连接 GROUP_CONCAT

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!