我有一个联接查询,在其中我留下了联接两个表,分别为tab_sector
和tab_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'
您可以看到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'
那么结果将是:
我的其他两条记录都没有。我也希望结果中包含这些行。
有人可以帮我解决这个问题吗?预先感谢。
答案 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;