JOIN查询MySQL中GROUP_CONCAT的问题

时间:2018-07-04 11:13:33

标签: mysql left-join group-concat

我有一个联接查询,在其中我留下了联接两个表,分别为tab_sectortab_sector_subdivisions。我在第一个表中有记录,第二个表中可能有也可能没有对应的记录。我以这种方式联接这些表,它应该返回第一个表的所有行和第二个表的匹配行。同样,如果第一个表中的行在第二个表中有多个记录,则它应返回为GROUP_CONCAT(field_name)。但是我的查询并没有返回我需要的方式。

这是没有GROUP_CONCAT的查询:

SELECT tab_sector.sector_id,tab_sector.sector_title,tab_sector.sector_desc,tab_sector.sector_image,tab_sector_subdivisions.subdiv_id 
FROM tab_sector 
LEFT JOIN tab_sector_subdivisions 
ON tab_sector_subdivisions.sector_id = tab_sector.sector_id WHERE tab_sector.active = 'Y'

结果是: enter image description here

您可以看到ID为20的2行。我需要的是单行,但subdiv_id(19,20)。然后我在查询中使用了GROUP_CONCAT,例如:

    SELECT tab_sector.sector_id,tab_sector.sector_title,tab_sector.sector_desc,tab_sector.sector_image,GROUP_CONCAT(tab_sector_subdivisions.subdiv_id) 
FROM tab_sector 
LEFT JOIN tab_sector_subdivisions 
ON tab_sector_subdivisions.sector_id = tab_sector.sector_id WHERE tab_sector.active = 'Y'

那么结果将是:

enter image description here

我的其他两条记录都没有。我也希望结果中包含这些行。

有人可以帮我解决这个问题吗?预先感谢。

2 个答案:

答案 0 :(得分:1)

对于未聚合的列,您需要使用分组依据

SELECT tab_sector.sector_id,tab_sector.sector_title,tab_sector.sector_desc
    ,tab_sector.sector_image,group_concat(tab_sector_subdivisions.subdiv_id )
LEFT JOIN tab_sector_subdivisions 
        ON tab_sector_subdivisions.sector_id = tab_sector.sector_id 
              AND tab_sector.active = 'Y'
GROUP BY  tab_sector.sector_id,tab_sector.sector_title,
     tab_sector.sector_desc, tab_sector.sector_image

答案 1 :(得分:0)

group by错过了为什么它返回一条记录的原因,

  SELECT tab_sector.sector_id,tab_sector.sector_title,tab_sector.sector_desc,tab_sector.sector_image,GROUP_CONCAT(tab_sector_subdivisions.subdiv_id) 
FROM tab_sector 
LEFT JOIN tab_sector_subdivisions 
ON tab_sector_subdivisions.sector_id = tab_sector.sector_id WHERE tab_sector.active = 'Y'
group by tab_sector.sector_id,tab_sector.sector_title,tab_sector.sector_desc,tab_sector.sector_image;