MySQL之FIND_IN_SET()的用法及说明
吾爱主题
阅读:204
2023-05-31 14:56:00
评论:0
一、语法
?1 | FIND_IN_SET(str,strlist) |
-
str
:要查询的字符串 -
strList
:一个被,
号分隔开的字符串 - 函数是返回strList中str所在的位置索引
二、用法
-
SELECT FIND_IN_SET(‘e’, ‘a,b,c,d’);
结果是0 -
SELECT FIND_IN_SET(‘b’, ‘a,b,c,d’);
结果是2:因为b在strlist集合中放在2的位置,从1开始 -
SELECT FIND_IN_SET(‘c’, ‘a,b,c,d’);
结果是3
和in、like的区别
find_in_set(str,strlist)函数是用变量,strlist内容是逗号分隔的字符串
-
in
后面是要常量,表示一个个罗列,in(‘11’,‘12’,‘13’) -
like
是模糊匹配,find_in_set是精确匹配
三、用途
举个例子一
当数据库表中,存在有逗号拼接的字符串的字段时,查询时候用FIND_IN_SET函数。
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # 创建表 CREATE TABLE IF NOT EXISTS tb_test1( `id` INT (11) NOT NULL auto_increment, ` name ` varchar (255) NOT NULL COMMENT '名字' , `type` varchar (255) NOT NULL COMMENT '类型: 1表示金卡;2表示银卡;3表示铜卡' , PRIMARY KEY (`id`) )ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT = 'FIND_IN_SET使用' ; # 新增数据 INSERT INTO tb_test1( name ,type) VALUES ( 'edg' , '1,2,3' ); INSERT INTO tb_test1( name ,type) VALUES ( 'rng' , '2,3' ); INSERT INTO tb_test1( name ,type) VALUES ( 'ig' , '1,3' ); # 查询 SELECT * FROM tb_test1 WHERE FIND_IN_SET( '1' ,type); # 返回type中包含1的记录 |
举个例子二
一张部门表中,有个userIds字段,存放的是关联的部门下用户的id;比如:‘111,112,113’。
然后需要查询返回的结果是,Dept对象中带有user的对象数组。
?1 2 3 4 5 6 | CREATE TABLE IF NOT EXISTS dept( `id` INT (11) NOT NULL auto_increment, ` name ` varchar (255) NOT NULL COMMENT '部门名字' , `user_ids` text DEFAULT NULL COMMENT '部门人员' , PRIMARY KEY (`id`) )ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT = '部门表' ; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <resultMap id= "ResultMap" type= "com.test.entity.dept" > <id column = "id" property= "id" jdbcType= "INTEGER" /> <result column = "name" property= "name" jdbcType= "VARCHAR" /> <result column = "user_ids" property= "userIds" jdbcType= "VARCHAR" /> <association property= "Users" resultMap= "Usesr_map" /> // 在实体类中有List< User > Users </resultMap> <sql id= "User_Column_List" > user .id user_id, user . name user_name </sql> <resultMap id= "Usesr_map" type= "com.test.entity.User" > <id column = "user_id" property= "id" jdbcType= "INTEGER" /> <result column = "user_name" property= "name" jdbcType= "VARCHAR" /> </resultMap> <! -- 只返回user_ids中包含的id的user记录 --> < select id= "selectOne" resultMap= "ResultMap" parameterType= "INTEGER" > SELECT e.id id,e. name name ,e.user_ids user_ids, <include refid= "User_Column_List" /> FROM dept e LEFT JOIN User user ON FIND_IN_SET( user .id,e.user_ids) WHERE e.id = #{e.id} </ select > |
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/qq_43575201/article/details/121412401
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。