【问题标题】:MySQL Combine rows into one with IN clauseMySQL 使用 IN 子句将行合二为一
【发布时间】:2021-02-20 23:20:35
【问题描述】:

我想根据下面的查询将值合并到一行中,但尽管使用了 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 是一个动态参数,需要保持组合。我得到的结果集将它分成两行,而不是保留它,这会破坏之后的其余逻辑。

任何想法/建议将不胜感激。

非常感谢!

【问题讨论】:

    标签: mysql join group-by group-concat


    【解决方案1】:

    GROUP BY r.id 使您每个 rec.id 获得一行。如果您只想要一行,只需删除 GROUP BY。 Whenever the select fields include aggregation functions such as GROUP_CONCAT and there is no GROUP BY, all rows are grouped together.

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

    【讨论】:

    • 谢谢,就是这样!现在工作:-)
    • 如果这个答案对你有帮助,请考虑支持它
    猜你喜欢
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多