我有两张表:一张是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?
答案 0 :(得分:1)
您可以根据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) || ':%'