繁体   English   中英

Oracle SQL select,比较2个listagg的值

[英]Oracle SQL select, compare 2 listagg's values

我有两张表:一张是TEXT_MSGROLES ,另一张是USERSROLES ROLESlistagg 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM