MySQL 5.7下如何关联含逗号分隔字段的两张表查询
在MySQL 5.7中实现逗号分隔字段与关联表的关联查询
可以实现,利用MySQL 5.7支持的FIND_IN_SET()函数匹配逗号分隔的area字段,再结合GROUP_CONCAT()函数将关联的地区名称拼接成逗号分隔的字符串,就能得到你要的结果。
表结构
campaign表
id name area 1 campaign 1 1,2,3 2 promo 3,4
area表
id name 1 Indonesia 2 Singapore 3 Malaysia 4 America
查询语句
SELECT c.id AS id_campaign, c.name AS campaign_name, GROUP_CONCAT(a.name ORDER BY a.id SEPARATOR ',') AS area_name FROM campaign c JOIN area a ON FIND_IN_SET(a.id, c.area) > 0 GROUP BY c.id, c.name;
语句说明
FIND_IN_SET(a.id, c.area):判断area表的id是否存在于campaign表area字段的逗号分隔列表中,返回大于0的数值则表示匹配成功。GROUP_CONCAT(a.name ORDER BY a.id SEPARATOR ','):将匹配到的地区名称按id排序后拼接成逗号分隔的字符串,与期望结果格式一致。- 按campaign表的id和name分组,确保每个活动仅返回一条汇总记录。
查询结果
id_campaign campaign_name area_name 1 campaign 1 Indonesia,Singapore,Malaysia 2 promo Malaysia,America
内容的提问来源于stack exchange,提问作者Diana
相关产品推荐
相关产品推荐

