AI智能
改变未来

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) 打赏
未经允许不得转载:爱站程序员基地 » oracle中一张表的某个字段与另一张表关联