需求是这样子,两张表联查,a表id主键对应 b表ids字段。
id为integer ,
ids对应字段为varchar2。
如 我们要查询 a表多个数据,就会用以下查询语句
此时用关联查询
select * from a,b where a.id in (b.ids) ; 这条语句会报无效数字。因为a.id为interger,类型b.ids varchar2 类型
解决方法:用到函数 instr()
先将 b表字段值 拼接成 这种格式 : ,121,312, → ‘,’||b.ids||’,'
a表id字段值 拼接成 ,212, → ‘,’||a.id||’,'
这个时候再使用instr() 函数就能 进行匹配
最终效果:
select a.* from a,b where instr (’,’||b.ids||’,’ , ‘,’||a.id||’,’) > 0
关于instr():
1.返回需要查询的字符在字符串中的下标
select instr(‘abcd’,‘a’) from dual; --返回1
select instr(‘helloworld’,‘l’) from dual; --返回结果:3 默认第一次出现“l”的位置
select instr(‘helloworld’,‘lo’) from dual; --返回结果:4 即:在“lo”中,“l”开始出现的位置
select instr(‘helloworld’,‘wo’) from dual; --返回结果:6 即“w”开始出现的位置