Mysql 利用FIND_IN_SET实现字符串模拟where in语句

Mysql 利用FIND_IN_SET实现字符串模拟where in语句

前言:

今天在项目中开发中遇到一个特殊的问题,需要用字符串来实现数据库where in的情况。该字符串格式如下:'2866,345,352,361',需要我去表中根据其ID依次查询出对应的关系来;

想象中的语句应该是将 '2866,345,352,361' 分割成数组,然后用where in ('2866','345','352','361') 来实现数据查询但是我发现Mysql的FIND_IN_SET函数可以实现这种情况模拟;

1.SQL如下:

select FIND_IN_SET(dept_id,'2866,345,352,361') as findInSet,t.dept_id,t.dept_name from sys_dept t where FIND_IN_SET(dept_id,'2866,345,352,361')

2.查询数据结果:

这样就可以直接套用字符串实现where in的情况了

3.如果我要是表与表之间进行这种关联,该如何实现呢?

首先我们可以添加一些虚拟的数据,来模拟该情况的发生:

##创建用户表
CREATE TABLE sys_user ( user_id INT COMMENT '用户id', dept_id VARCHAR ( 100 ) COMMENT '部门id', user_name VARCHAR ( 100 ) COMMENT '用户名' ) COMMENT = '用户表';
##添加用户
INSERT INTO sys_user ( user_id,dept_id, user_name )
VALUES( 1, '1,2,3', '张三' ),( 2, '2,3,4', '李四' );

##创建部门表
CREATE TABLE sys_dept (dept_id int COMMENT '部门id', dept_name VARCHAR ( 100 ) COMMENT '部门名' ) COMMENT = '部门表';
##添加部门
INSERT INTO sys_dept ( dept_id, dept_name )
VALUES( 1, '部门1'),( 2, '部门2' ),( 3, '部门3' ),( 4, '部门4' );

执行完后数据如下:

用户表

部门表

开始组装SQL语句:

注:只有在保证用户唯一时,才能用FIND_IN_SET,不然查询结果不是想要的

SELECT
	u.*,
	d.*
FROM
	sys_user u,
	sys_dept d 
WHERE
	FIND_IN_SET( d.dept_id, u.dept_id ) 
	AND user_id=1 ##只有在保证用户唯一时,才能用FIND_IN_SET,不然查询结果可能不是自己想要的

再配合GROUP_CONCAT函数,消除以上用户一对多的情况:

SELECT
	u.*,
	GROUP_CONCAT(d.dept_name) as dept_name
FROM
	sys_user u,
	sys_dept d 
WHERE
	FIND_IN_SET( d.dept_id, u.dept_id ) 
	AND user_id=1 ##只有在保证用户唯一时,才能用FIND_IN_SET,不然查询结果可能不是自己想要的

 

如有不足欢迎留言!!!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值