当前位置: 首页 > news >正文

MySQL: find_in_set基本使用

一、创建表

CREATE TABLE `tb_test` (`id` int(8) NOT NULL auto_increment,`name` varchar(255) NOT NULL,`list` varchar(255) NOT NULL,PRIMARY KEY  (`id`)
);
INSERT INTO `tb_test` VALUES (1, 'name', 'daodao,xiaohu,xiaoqin');
INSERT INTO `tb_test` VALUES (2, 'name2', 'xiaohu,daodao,xiaoqin');
INSERT INTO `tb_test` VALUES (3, 'name3', 'xiaoqin,daodao,xiaohu');

二、使用find_in_set查询

SELECT id,name,list from tb_test WHERE FIND_IN_SET('daodao',list);

三、使用IN查询

实际上这样是不行的,这样只有当list字段的值等于’daodao’时(和IN前面的字符串完全匹配),查询才有效,否则都得不到结果,即使’daodao’真的在list中。

SELECT id,name,list from tb_test WHERE 'daodao' IN(list);

这两条到底有什么区别呢?为什么第一条不能取得正确的结果,而第二条却能取得结果。原因其实是(一)中 (list) list是变量, 而(二)中 (‘libk’, ‘zyfon’, ‘daodao’)是常量。

SELECT id,name,list from tb_test WHERE 'daodao' IN ('libk', 'zyfon', 'daodao');

四、使用Like查询

CREATE TABLE users(id int(6) NOT NULL AUTO_INCREMENT,name VARCHAR(20) NOT NULL,limits VARCHAR(50) NOT NULL, -- 权限PRIMARY KEY (id)
);INSERT INTO users(name, limits) VALUES('小张','1,2,12'); 
INSERT INTO users(name, limits) VALUES('小王','11,22,32');
SELECT * FROM users WHERE limits LIKE '%2%';

在这里插入图片描述
这样第二条数据不具有权限’2’的用户也查出来了,不符合预期。下面利用mysql 函数find_in_set()来解决。

SELECT * FROM users WHERE FIND_IN_SET(2,limits);

在这里插入图片描述

五、总结

  • mysql字符串函数 find_in_set(str1,str2)函数是返回str2中str1所在的位置索引,str2必须以","分割开
  • like是广泛的模糊匹配,字符串中没有分隔符,Find_IN_SET 是精确匹配,字段值以英文”,”分隔,Find_IN_SET查询的结果要小于like查询的结果。

http://www.mrgr.cn/news/5319.html

相关文章:

  • 发布MindSearch到ModelScope创空间
  • 线程的锁机制
  • 利用puppeteer将html网页生成图片
  • 网络编程
  • Neo4j 图数据库入门
  • Java爬虫图像处理:从获取到解析
  • 深入探索【Hadoop】生态系统:Hive、Pig、HBase及更多关键组件(上)
  • CSS3-新特性
  • 2024年如何将低质量视频变成高质量视频
  • 网安新声 | 网易云音乐崩了:网络安全如何守护在线体验
  • 【机器学习-监督学习】逻辑斯谛回归
  • 48、Python之模块和包:当导入模块时,Python解释器做了什么
  • ArcGIS热点分析 (Getis-Ord Gi*)——基于地级市尺度的七普人口普查数据的热点与冷点分析
  • GD32 ADC配置跳坑
  • vue一键打不同环境的包
  • Django 后端架构开发:手机与邮箱验证码接入、腾讯云短信SDK和网易邮箱
  • 第四届机械制造与智能控制国际学术会议(ICMMIC 2024)
  • 保姆级-C#与Halcon的窗体界面展示阈值分割图像教程(机器视觉保姆级教程)
  • 通过相机来获取图片
  • 特征工程中预处理中,字符串转成元组