Левое внешнее объединение двух таблиц с использованием двух столбцов на каждой стороне, где один столбец на одной стороне является подстрокой - PullRequest
0 голосов
/ 15 декабря 2018

Привет Я обнаружил множество потоков о соединении двух столбцов в двух таблицах, но не там, где используется столбец, созданный подстрокой на одной стороне соединения, в ASE.Это роль данных о назначении пользователя, и она считывается из исходной системы с дополнительными данными, которые мне нужно вычесть из начала поля roleAssignments, а затем добавить префикс PRIV:ROLE:REPNAME:, чтобы иметь возможность совпадать с тем, что у меня есть вбаза данных IdM.

В настоящий момент у меня есть SQL:

select 
distinct(l.mcthismskeyvalue) as logonuid, 
l.mcothermskeyvalue, 
FROM idmv_link_ext l
left outer join
roleAssign s on l.mcthismskeyvalue = 'PRIV:ROLE:REPNAME' || ':' || substring(s.roleassignments,43,30) as roleAssignments2 
where l.mcothermskeyvalue like 'PRIV:ROLE:REPNAME:%' 
and l.mcthisocname='MX_PERSON' 
and l.mcthismskeyvalue = 'TEST_MU1';

Конечный результат, который я ищу, заключается в том, что я могу видеть результаты, которые находятся на roleAssign, а не на idmv_link_ext, затем запустите в обратном порядке, чтобы увидеть результаты, которые находятся в idmv_link_ext, а не в roleAssign.В Oracle это было возможно с помощью оператора MINUS, но эта же команда не работает для меня в ASE.Также посмотрел на where not exists, но не могу получить синтаксис прямо здесь:

    select l.mcthismskeyvalue as logonuid, l.mcothermskeyvalue as roleAssignments 
FROM idmv_link_ext l where mcothermskeyvalue like 'PRIV:ROLE:REPNAME%' and mcthisocname='MX_PERSON' 
and l.mcthismskeyvalue = 'TEST_MU1' 
where (not exists 
(select s.refid as logonuid, 'PRIV:ROLE:REPNAME' || ':' || substring(s.roleassignments,43,30) as roleAssignments 
FROM roleAssign s
where s.refid = 'TEST_MU1'))
;

Это рабочий синтаксис Oracle с использованием MINUS, для справки:

    select mcthismskeyvalue as logonuid, 
 * substring(mcothermskeyvalue,11,60) as roleassignments 
 * FROM idmv_link_ext where mcothermskeyvalue like 'PRIV:ROLE:REPNAME%' and mcthisocname='MX_PERSON'
minus  
 * select refid as logonuid, 'REPNAME' || ':' || substring(roleassignments,43,30) as roleAssignments 
 * FROM roleAssign

Я настроил свойASE запрашивает, чтобы устранить необходимость в подстроке с обеих сторон, чтобы упростить.

Большое спасибо.

...