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