MySQL 使用 IN 子句将行合并为一个

MySQL Combine rows into one with IN clause

我想根据下面的查询将值合并为一行,但尽管使用了 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,84,88    NULL        Ellie,Eve,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,84,88       NULL        Ellie,Eve,Vicki  NULL

r.id 11298,11299 是一个动态参数,需要保持组合。我得到的结果集将它分成两行,而不是将它保留为一个,这样会在之后破坏其余的逻辑。

任何 ideas/suggestions 将不胜感激。

非常感谢!

GROUP BY r.id 使您每 rec.id 获得一行。如果您只需要一行,只需删除 GROUP BY。每当 select 字段包含 GROUP_CONCAT 等聚合函数且没有 GROUP BY 时,所有行都分组在一起。

然而,这将产生 10 的 rd_length,而不是 10,10。如果希望 non-distinct 值出现多次,需要去掉 DISTINCT。如果您希望它们仅在出现不同 rec.id 时出现,那么您可能需要将现有查询变成子查询并从中执行 select group_concat(rd_length) as rd_length, ....