ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
查询语句示例: ```sql -- 分组拼接 group_concat(str) 搭配group by使用,按照group by后的字段分组,把name合并在一个字段中,并且用逗号分隔开。 SELECT s.shop_id, s.major_item, GROUP_CONCAT( m.`name` ) AS 中文名称 FROM seller_shop s LEFT JOIN m_info m ON FIND_IN_SET( m.id, s.major_item ) > 0 GROUP BY s.shop_id; -- GROUP_CONCAT 用法扩展(DISTINCT 去重、ORDER BY 排序、SEPARATOR 分隔符) GROUP_CONCAT( DISTINCT m.`name` ORDER BY m.id DESC SEPARATOR '、' ) AS 中文名称 ``` ![](https://img.kancloud.cn/02/ec/02ec1073ecd9c69227819a4d57509782_312x85.png) 业务表: ![](https://img.kancloud.cn/4b/47/4b478d3206d9098267f65e304ffb1f74_438x85.png) ```sql CREATE TABLE `seller_shop` ( `shop_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `major_product` varchar(255) NOT NULL DEFAULT '', `major_item` varchar(255) NOT NULL DEFAULT '', `service_area` varchar(255) NOT NULL DEFAULT '', PRIMARY KEY (`shop_id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; INSERT INTO `seller_shop`(`shop_id`, `major_product`, `major_item`, `service_area`) VALUES (1, '钢筋水泥', '12,13,14', '21130,210500'); INSERT INTO `seller_shop`(`shop_id`, `major_product`, `major_item`, `service_area`) VALUES (2, '钢筋水泥', '12,15', '21130,210500'); ``` 翻译表: ![](https://img.kancloud.cn/dd/66/dd66e774aaa312b61597171ea7e12fb1_340x126.png) ```sql CREATE TABLE `m_info` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `parent_id` int(10) unsigned NOT NULL, `name` varchar(255) NOT NULL DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8; INSERT INTO `m_info`(`id`, `parent_id`, `name`) VALUES (12, 0, '钢材'); INSERT INTO `m_info`(`id`, `parent_id`, `name`) VALUES (13, 12, 'H钢'); INSERT INTO `m_info`(`id`, `parent_id`, `name`) VALUES (14, 12, '工字钢'); INSERT INTO `m_info`(`id`, `parent_id`, `name`) VALUES (15, 12, '洛钢'); ``` ```sql -- FIND_IN_SET SELECT FIND_IN_SET('b', 'a,b,c,d'); -- 结果:2 -- 因为 b 在strlist集合中2的位置, a是位置1 select FIND_IN_SET('1', '1'); -- 结果:1 -- 这时候的strlist集合有点特殊,只有一个字符串 select FIND_IN_SET('2', '1,2'); -- 结果:0 -- 因为必须是英文逗号 select FIND_IN_SET('6', '1'); -- 结果:0 strlist中不存在str,所以返回0。 select FIND_IN_SET(NULL, '1'); -- 结果:null -- 传递的结果是null select FIND_IN_SET('a,b', 'a,b,c,d'); -- 结果:0 ``` 说明: FIND_IN_SET(str,strlist) : str 要查询的字符串,strlist 需查询的字段,参数以”,”分隔,形式如 (1,2,6,8,10,22);该函数的作用是查询字段(strlist)中是否包含(str)的结果,返回结果为null或记录。 假如字符串str在由N个子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间。 一个字符串列表就是一个由一些被 ',' 符号分开的子链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则FIND_IN_SET() 函数被优化,使用比特计算。 如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号( , )时将无法正常运行。 原文 https://blog.csdn.net/jun2571/article/details/127423636