如何解决MySQL使用IN子句将行合并为一
我想根据下面的查询将值合并为一行,但是尽管使用了GROUP_CONCAT,我还是得到了两行。
SELECT
GROUP_CONCAT(DISTINCT d.id ORDER BY d.id ASC SEPARATOR ',') AS rd_id,GROUP_CONCAT(DISTINCT d.length ORDER BY d.length ASC SEPARATOR ',') AS rd_length,GROUP_CONCAT(DISTINCT c.id ORDER BY c.id ASC SEPARATOR ',') AS rc_id,GROUP_CONCAT(DISTINCT c.length ORDER BY c.length ASC SEPARATOR ',') AS rc_length,GROUP_CONCAT(DISTINCT d.name ORDER BY d.name ASC SEPARATOR ',') AS rd_name,GROUP_CONCAT(DISTINCT c.title ORDER BY c.title ASC SEPARATOR ',') AS rc_name,GROUP_CONCAT(DISTINCT s1.id ORDER BY s1.id ASC SEPARATOR ',') AS rd_staff_id,GROUP_CONCAT(DISTINCT s2.id ORDER BY s2.id ASC SEPARATOR ',') AS rc_staff_id,GROUP_CONCAT(DISTINCT s1.title ORDER BY s1.title ASC SEPARATOR ',') AS rd_staff_name,GROUP_CONCAT(DISTINCT s2.title ORDER BY s2.title ASC SEPARATOR ',') AS rc_staff_name
FROM rec r
LEFT JOIN dis d ON d.id = r.dis_id
LEFT JOIN covs c ON c.id = r.cov_id
LEFT JOIN staff s1 ON FIND_IN_SET(d.id,s1.dis)
LEFT JOIN staff s2 ON FIND_IN_SET(c.id,s2.covs)
WHERE r.sid = 8
AND r.id IN (11298,11299)
GROUP BY r.id;
结果为
rd_id rd_length rc_id rc_length rd_name rc_name rd_staff_id rc_staff_id rd_staff_name rc_staff_name
26 10 NULL NULL DAC NULL 74,84,88 NULL Ellie,Eve,Vicki NULL
18 10 NULL NULL APS NULL 74,Vicki NULL
我想要的是这个
rd_id rd_length rc_id rc_length rd_name rc_name rd_staff_id rc_staff_id rd_staff_name rc_staff_name
26,18 10,10 NULL NULL DAC,APS NULL 74,88 NULL Ellie,Vicki NULL
r.id
11298,11299
是一个动态参数,需要保持组合。我得到的结果集将其分为两行,而不是将其保留为会破坏随后其余逻辑的行。
任何想法/建议都将不胜感激。
非常感谢!
解决方法
GROUP BY r.id
使您每个rec.id获得一行。如果您只想要一行,则只需删除GROUP BY。每当选择字段包括聚合功能,诸如GROUP_CONCAT并且没有GROUP BY,所有行被分组在一起。
这将产生rd_length 10
,而不是10,10
。如果您希望多次显示不同的值,则需要删除DISTINCT。如果希望仅当它们针对不同的rec.id出现时才出现,那么您可能需要将现有查询放入子查询中,并从其中进行select group_concat(rd_length) as rd_length,....
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。