oracle中一张表的某个字段与另一张表关联

今天在无意间查询到一个SQL,有两张表,一张用户表,用户表中有个personroles字段,CLOB类型,里面是逗号分隔的角色id(A,B,C,D),需要查询每个人和其现有的角色。问题在于用户表和角色表的关联,直接left join用roles.id in (user.personroles),查询不出来,最后看到了ORACLE中有个函数instr

instr()函数的格式  (俗称:字符查找函数)

格式一:instr( string1, string2 )    /   instr(源字符串, 目标字符串)

格式二:instr( string1, string2 [, start_position [, nth_appearance ] ] )   /   instr(源字符串, 目标字符串, 起始位置, 匹配序号)

解析:string2 的值要在string1中查找,是从start_position给出的数值(即:位置)开始在string1检索,检索第nth_appearance(几)次出现string2。

最终写出的sql如下:

select a.chinaname,
a.personroles,
wm_concat(b.chinaname)
from sys_user a
join sys_roles b
on instr(',' || to_char(a.personroles) || ',', ',' || b.id || ',') > 0
where a.delstatus = 0
group by a.chinaname, a.personroles;

查询结果正确。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值