[英]Oracle SQL select, compare 2 listagg's values
我有两张表:一张是TEXT_MSG列ROLES ,另一张是USERS列ROLES 。 列ROLES是listagg VARCHAR2,分隔符是:符号。 可以使用WHERE子句编写 SQL 语句以从 USERS 表中获取记录 WHERE 来自 TEXT_MSG.ROLES 的一个或多个角色等于来自 USERS.ROLES 的角色? 例如:
TEXT_MSG.ROLES 为 1:5:7:10;
USERS.ROLES 是 1:3。
不使用 PL/SQL?
您可以根据U.ROLES
生成记录,并一一比较如下:
SELECT distinct U.USERID, U.ROLES, T.ROLES FROM USERS U
CROSS JOIN table(
cast(multiset(
select level from dual
connect by level <= regexp_count(U.ROLES, ':') + 1)
as sys.odcinumberlist) ) lvls
JOIN TEXT_MSG T ON ':' || T.ROLES || ':' LIKE
'%:' || REGEXP_SUBSTR(U.ROLES,'[^:]+',1,lvls.column_value) || ':%'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.