解决mysql的in条件中参数是带引号的字符串的时候查询失效
来源:互联网 发布:数据侠客行txt下载 编辑:程序博客网 时间:2024/05/17 08:18
在开发中有时会使用到in查询,并且里面的参数又是数据库中的一个字段,比如如下错误的例子
SELECT `ag`.`id`, `ag`.`rules`, ( SELECT GROUP_CONCAT(ar.title) FROM auth_rule ar WHERE ar.id IN (ag.rules) ) as rulesNameFROM `auth_group` `ag`
上面语句查询的表是常用的后台权限表,表数据如下:
上面查询角色拥有的规则名称,但是这里传进去的是ag.rules,其实这个字段传进去实际上在数据库是这样查询的(多了个引号):
ar.id IN ('4,3')
而不是
ar.id in (4,3)
在mysql中in里面如果是字符串的话,会自动转化成int类型的,内部使用了如下方法:
CAST('4,3' AS INT)
强转之后’4,3’会变成4,所以查询出来的结果只是一条而已。这个问题其实可以使用另外一个mysql的函数来解决:
FIND_IN_SET('查询的值(如:1)', '使用逗号隔开的字符串集合,如:('1,2,3')')
正确的sql语句如下:
SELECT `ag`.`id`, `ag`.`title`, `ag`.`status`, `ag`.`rules`, ( SELECT GROUP_CONCAT(ar.title) FROM auth_rule ar WHERE FIND_IN_SET(ar.id,ag.rules) ) as rulesNameFROM `auth_group` `ag`
0 0
- 解决mysql的in条件中参数是带引号的字符串的时候查询失效
- 解决mysql查询,in条件参数为带逗号的字符串,查询结果错误
- Mybatis中查询的参数为Map条件中是in 数据组参数
- php数据查询的时候字符串变量要加引号
- Oracle中查询时候使index索引失效的限制条件
- Mysql查询条件加引号与不加引号的区别
- 为什么oracle中字段是varchar型,但是查询的时候不写引号也能查询
- 存储过程中动态条件的添加 where条件 in条件中字符串参数
- mysql带 AND 的多条件查询
- mysql带 OR 的多条件查询
- MySQL查询条件中exists和in的区别
- MySQL查询条件中字符串包含空格的问题
- Java中带条件的查询
- hibernate中带查询条件的分页
- 带参数的存储过程实现任意条件的查询
- mysql 添加索引后 在查询的时候是mysql就自动从索引里面查询了。还是查询的时候有单 独的参数查询索引?
- mysql 添加索引后 在查询的时候是mysql就自动从索引里面查询了。还是查询的时候有单 独的参数查询索引?
- spring data JPA 中带查询条件的分页in的用法
- 每天一个linux命令(37):vmstat命令
- MFC工作日记2
- MUI框架入门
- GDAL C#版本 "安全透明方法"问题解决方案
- STM32的烧录文件.bat 解析
- 解决mysql的in条件中参数是带引号的字符串的时候查询失效
- 【RequireJS】RequireJS完全解读
- BigDecimal操作
- json与javaBean,Map集合等的互相装换
- MES11大标准模块(ISA95)
- margin-top失效 出现吞吃合并现象
- ucos通信邮箱的理解
- SilveOS 云操作系统体验
- 服务器与客户端单次通信