JOIN 查询 mysql 中的 GROUP_CONCAT 问题
issue with GROUP_CONCAT in JOIN query mysql
我有一个连接查询,我离开连接 2 tables 说 tab_sector
和 tab_sector_subdivisions
。我在第一个 table 中有记录,在第二个 table 中可能有也可能没有相应的记录。我加入这些 table 的方式应该是 return 第一个 table 的所有行和第二个 table 的匹配行。此外,如果第一个 table 中的一行在第二个 table 中有多个记录,它应该 return 为 GROUP_CONCAT(field_name)
。但是我的查询没有 return 我需要的方式。
这是没有 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'
那么结果将是:
我的另外两条记录在这里面不见了。我的结果中也想要那几行。
谁能帮我解决这个问题?提前致谢。
您需要对未聚合的列进行分组
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
group by missed 这就是它返回一条记录的原因,
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;
我有一个连接查询,我离开连接 2 tables 说 tab_sector
和 tab_sector_subdivisions
。我在第一个 table 中有记录,在第二个 table 中可能有也可能没有相应的记录。我加入这些 table 的方式应该是 return 第一个 table 的所有行和第二个 table 的匹配行。此外,如果第一个 table 中的一行在第二个 table 中有多个记录,它应该 return 为 GROUP_CONCAT(field_name)
。但是我的查询没有 return 我需要的方式。
这是没有 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'
那么结果将是:
我的另外两条记录在这里面不见了。我的结果中也想要那几行。
谁能帮我解决这个问题?提前致谢。
您需要对未聚合的列进行分组
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
group by missed 这就是它返回一条记录的原因,
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;