Mysql逗号拼接字符窜去查询另一张表的数据

今天写sql遇到的问题:

        就是 用逗号拼接的字符串在表中去查询另张表的所有数据并且拼接

t_user表

iduserNameroleIds
1aaa1,3
2bbb2,3
3ccc1,3,4

t_role表

idroleName
1角色A
2角色B
3角色C
4角色D

现在想要查询的结果如下

iduserNameroleIdsroleNameStr
1aaa1,3角色A,角色C
2bbb2,3角色B,角色C
3ccc1,3,4角色A,角色C,角色D

方案一:最开始的方案是先查用户表,将数据返回到服务器,在代码里进行切割,然后再去t_role表里面去查询对应的名称,返回到程序进行拼接。这样做虽然很简单也很好理解但是效率太低。

方案二:想着MySQL有没有类似于split函数的东西,直接切割字符串为数组。但是查询下来发现基本上都是建立在存储过程上面,繁杂、而且不易维护。放弃了这个方案。

方案三:使用FIND_IN_SET函数和GROUP_CONCAT函数进行查询,操作简单,效率高。不过 FIND_IN_SET在数据量打的时候效率比较低,因为它有点类似于like查询。所以当数据量特别大的时候这样做就不太合适了。

总结:如果数据量不是很大可以使用方案三,如果数据量特别大建议使用方案一。因为方案一在数据量很大的情况下添加了索引以后效率会比方案三应该更快。当然最好是建表的时候直接创建一张关联表,这样就可以不使用FIND_IN_SET函数,效率就会很高了。

查询语句如下

SELECT 
*,
(SELECT GROUP_CONCAT(roleName) 
FROM t_role tr 
WHERE FIND_IN_SET(tr.id,(SELECT roleIds FROM t_user WHERE id=tu.id))) AS roleNameStr
FROM t_user tu 


查询结果如下:基本就是这样了,做个简单记录。

感谢大哥教程:(2条消息) Mysql逗号拼接字符串的关联查询 (in条件参数为带逗号的字符串)_极速小乌龟的博客-CSDN博客

 有一个问题我也是不太理解请大佬指教

查询这条sql 为什么本来不对应的数据却能行 ,WHERE  id =tu.id 这个必须写

这个文章表对应, 但是我们公司的业务id不对应 也没什么关联

----- 把用户id 转换成 用户名称 -------

// nickname 用户名称 用户表 id  你需要的表id 你需要操作的表 shenheren

  (select GROUP_CONCAT(nickname) from sys_user where id = shenheren)  as shenheren,

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值