mysql中使用FIND_IN_SET查询在逗号隔开的字符串中符合多个ID的数据
2017-04-24 18:27
871 查看
已知:
A表
select A.id from A
id
104
107
108
109
110
111
112
113
114
115
118
165
173
B表
select B.role from B
role
49,51,33,72,88,104
1,74,33,51,43,72,68,70,88,56,57,65,107
76,88,111
123
45
60,80,75,108
109
108
109
要求:查询B表role字段逗号隔开的数据中,包含A表id字段的记录。
方法一:
先查出A表的id,然后在B表中用or find_in_set逐个查询
select B.role from B
where
FIND_IN_SET(‘104’ ,B.role)
or FIND_IN_SET(‘107’ ,B.role)
or FIND_IN_SET(‘108’ ,B.role)
or FIND_IN_SET(‘109’ ,B.role)
or FIND_IN_SET(‘110’ ,B.role)
or FIND_IN_SET(‘111’ ,B.role)
or FIND_IN_SET(‘112’ ,B.role)
or FIND_IN_SET(‘113’ ,B.role)
or FIND_IN_SET(‘114’ ,B.role)
or FIND_IN_SET(‘115’ ,B.role)
or FIND_IN_SET(‘118’ ,B.role)
or FIND_IN_SET(‘165’ ,B.role)
or FIND_IN_SET(‘173’ ,B.role);
方法二:
先将A表查询结果用别名表示,然后将查询结果字段别名作为FIND_IN_SET的第一个参数进行查询
select B.role,t.Aid from B,(select A.id as Aid from A) t
where
FIND_IN_SET(t.tid,B.role)
方法三:
使用大小写敏感的locate函数代替find_in_set;该方法不适用于role字段数据字符串之间有包含关系的数据查询;此方法属投机取巧,目前适应本文测试数据,但大部分情况下达不到目标,不推荐使用
select B.role,t.Aid from B,(select A.id as Aid from A) t
where
locate(t.tid,B.role)>0
查询结果:
49,51,33,72,88,104
1,74,33,51,43,72,68,70,88,56,57,65,107
76,88,111
60,80,75,108
109
108
109
A表
select A.id from A
id
104
107
108
109
110
111
112
113
114
115
118
165
173
B表
select B.role from B
role
49,51,33,72,88,104
1,74,33,51,43,72,68,70,88,56,57,65,107
76,88,111
123
45
60,80,75,108
109
108
109
要求:查询B表role字段逗号隔开的数据中,包含A表id字段的记录。
方法一:
先查出A表的id,然后在B表中用or find_in_set逐个查询
select B.role from B
where
FIND_IN_SET(‘104’ ,B.role)
or FIND_IN_SET(‘107’ ,B.role)
or FIND_IN_SET(‘108’ ,B.role)
or FIND_IN_SET(‘109’ ,B.role)
or FIND_IN_SET(‘110’ ,B.role)
or FIND_IN_SET(‘111’ ,B.role)
or FIND_IN_SET(‘112’ ,B.role)
or FIND_IN_SET(‘113’ ,B.role)
or FIND_IN_SET(‘114’ ,B.role)
or FIND_IN_SET(‘115’ ,B.role)
or FIND_IN_SET(‘118’ ,B.role)
or FIND_IN_SET(‘165’ ,B.role)
or FIND_IN_SET(‘173’ ,B.role);
方法二:
先将A表查询结果用别名表示,然后将查询结果字段别名作为FIND_IN_SET的第一个参数进行查询
select B.role,t.Aid from B,(select A.id as Aid from A) t
where
FIND_IN_SET(t.tid,B.role)
方法三:
使用大小写敏感的locate函数代替find_in_set;该方法不适用于role字段数据字符串之间有包含关系的数据查询;此方法属投机取巧,目前适应本文测试数据,但大部分情况下达不到目标,不推荐使用
select B.role,t.Aid from B,(select A.id as Aid from A) t
where
locate(t.tid,B.role)>0
查询结果:
49,51,33,72,88,104
1,74,33,51,43,72,68,70,88,56,57,65,107
76,88,111
60,80,75,108
109
108
109
相关文章推荐
- mysql中使用FIND_IN_SET查询在逗号隔开的字符串中符合多个ID的数据
- Mysql中使用FIND_IN_SET解决IN条件为字符串时只有第一个数据可用的问题
- MYSQL中利用select查询某字段中包含以逗号分隔的字符串的记录方法find_in_set
- Mysql中使用FIND_IN_SET解决IN条件为字符串时只有第一个数据可用的问题
- 【mysql】find_in_set 和 in 混合使用查询数据紊乱
- sql查询find_in_set,字段包含多个ID,并用逗号分开,查询该字段是否包含某个ID
- mysql之使用find_in_set和group_concat组合递归函数时数据不全
- MYSQL中模糊查询带逗号间隔的字符(FIND_IN_SET)
- mysql 按年度、季度、月度、周、日SQL统计查询,mysql 存储过程 中 in 和 FIND_IN_SET 传递多个参数的使用
- MySql的FIND_IN_SET()查询函数的使用
- array_filter、find_in_set查询id是否在id集合中、concat连接字符串,ifnull、if用法
- 利用mysql 字符串函数 find_in_set()查询包含字符串
- MySQL查询中 find_in_set 在使用中可能遇到的问题
- mysql:find_in_set 查找逗号分隔的数据
- mysql中FIND_IN_SET的使用方法
- mysql 的 find_in_set,INSTR函数使用方法
- Mysql中in和find_in_set的使用说明
- mysql中FIND_IN_SET的使用方法
- Mysql字符串字段中是否包含某个字符串,用 find_in_set
- MySQL之IN与FIND_IN_SET的使用