解决mysql的in条件中参数是带引号的字符串的时候查询失效
2017-01-05 11:29
561 查看
在开发中有时会使用到in查询,并且里面的参数又是数据库中的一个字段,比如如下错误的例子
上面语句查询的表是常用的后台权限表,表数据如下:
上面查询角色拥有的规则名称,但是这里传进去的是ag.rules,其实这个字段传进去实际上在数据库是这样查询的(多了个引号):
而不是
在mysql中in里面如果是字符串的话,会自动转化成int类型的,内部使用了如下方法:
强转之后’4,3’会变成4,所以查询出来的结果只是一条而已。这个问题其实可以使用另外一个mysql的函数来解决:
正确的sql语句如下:
SELECT `ag`.`id`, `ag`.`rules`, ( SELECT GROUP_CONCAT(ar.title) FROM auth_rule ar WHERE ar.id IN (ag.rules) ) as rulesName FROM `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 rulesName FROM `auth_group` `ag`
相关文章推荐
- 解决mysql查询,in条件参数为带逗号的字符串,查询结果错误
- Mysql-左连接查询条件失效的解决办法
- Mysql中使用FIND_IN_SET解决IN条件为字符串时只有第一个数据可用的问题
- Mysql中使用FIND_IN_SET解决IN条件为字符串时只有第一个数据可用的问题
- 在使用mysql条件in查询的时候出现查的条数变少的原因以及解决方案
- Oracle IN 传递字符串参数查询失效
- mysql按条件查询当条件是数字的时候加不加引号是一样的。
- MySql使用全记录3 -----以中文作为查询条件时结果为空的原因以及两个MySql小知识点(varchar、单双引号)
- 优化MySQL开启skip-name-resolve参数时显示“ignored in --skip-name-resolve mode.”Warning解决方法
- sql 存储过程 where条件 in 字符串参数
- unidac 访问sql server 字符查询参数失效问题及解决办法
- 关于Mysql查询带单引号及插入带单引号字符串问题
- string.Format 里面包含 javascript方法参数的时候 单引号变成双引号的问题解决方法
- Aggregate 为字符串数组元素添加单引号 可用于SQL数据查询 in
- MySQL查询条件中字符串包含空格的问题
- 逗号分隔字符串转换为一张表--解决查询in(逗号分隔字符串)出错问题
- ExtJs 3 ExtJs4 分页(pagingtoolbar)带参数(条件)查询解决方法
- 存储过程接收多个值(用分隔符号的字符串参数)的用in查询
- 存储过程中动态条件的添加 where条件 in条件中字符串参数
- mysql 查询结果,字符串在.net中变成System.Byte[] 解决方法