首页 > 数据库 >解决mysql的in条件中参数是带引号的字符串的时候查询失效

解决mysql的in条件中参数是带引号的字符串的时候查询失效

时间:2022-11-24 17:33:12浏览次数:50  
标签:ag rules 引号 查询 ar mysql 失效 id SELECT


在开发中有时会使用到in查询,并且里面的参数又是数据库中的一个字段,比如如下错误的例子

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`

上面语句查询的表是常用的后台权限表,表数据如下:

解决mysql的in条件中参数是带引号的字符串的时候查询失效_mysql

上面查询角色拥有的规则名称,但是这里传进去的是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`


标签:ag,rules,引号,查询,ar,mysql,失效,id,SELECT
From: https://blog.51cto.com/u_15890522/5884396

相关文章

  • mysql索引和性能优化
    使用索引的原则1.如果没有唯一性要求,可以选择普通索引2.如果列上有唯一性要求,可以选择唯一索引3.如果是需要模糊搜索,建议选择全文索引4.如果有多个条件一起查......
  • MySQL 查询
    createTABLEstudent(idintnotnullDEFAULT1,nameVARCHAR(20)notnullDEFAULT'',chineseFLOATnotnullDEFAULT0.0,englishFLOATnotnullDEFAULT0.0,math......
  • MYSQL 字段约束条件
    字段的约束条件创建表:createtablet19(idint,namevarchar(32));往表中添加数据:insertintot19(name,id)values('tom',1);#可以自定义字段顺序......
  • MySQL数据库基础3
    今日内容概要主题:字段约束条件无符号零填充非空默认值唯一值主键自增外键今日内容详细无符号零填充unsigned无符号 idintunsignedzerofill零填充......
  • MySQL数据库管理
    一、MySQL数据库管理1.1库和表库是由一个个相互联系的二维表组成的表是由一行行记录和一列列的字段组成的行(记录):用来描述一个对象的信息列(字段):用来描述对象的一个属......
  • hive和mysql的笔记-反向overwrite,避免重复插入数据,量表关联更新
    hive和mysql的笔记-反向overwrite,避免重复插入数据,量表关联更新1反向overwrite操作->解决错误的插入数据的问题。描述:​ 例如​ 学生表:student<id,name,createtime......
  • MySQL---InnoDB数据存储结构(区_段_碎片区_表空间)
    区_段_碎片区为什么要有区?为什么要有段?为什么要有碎片区?区的分类 表空间 独立表空间系统表空间......
  • 总结我的 MySQL 学习历程,给有需要的人看
    作者|慕课网精英讲师马听你好,我是马听,现在是某零售公司的MySQLDBA,身处一线的我表示有很多话要讲。我的MySQL学习历程在我大三的时候,就开始接触到MySQL了,当时我也是从......
  • mysql的配置文件和逻辑架构
    二进制日志log-bin——主从复制——log-bin=mysql-bin错误日志log-error——默认是关闭的,记录严重的警告和错误信息,每次启动和关闭的详细信息等。——log-error=var/log/m......
  • mysql 表字段约束条件
    目录无符号、零填充非空默认值唯一值主键自增外键前戏关系的判断一对多的关系外键字段的建立多对多关系一对一关系无符号、零填充unsigned idintunsignedzerofill i......