Warum sind die zwei Zeilen für AI_CL_ID = 111 korrekt? Sie sind falsch gemäß Ihrer Spezifikation, denn aufgezeichnet = 123 entspricht "Monster" aber es hat "Sekundär" in Ihrer target_system
Tabelle.
Um alle Zeilen in der target_system
Tabelle mit dem falschen op_code
zu finden, können Sie die folgende Abfrage verwenden. Annahmen: Das Paar (ID, Code) ist einzigartig target_system
; In keiner Spalte sind NULL-Werte enthalten. source_name
in target_system
ist immer korrekt (es entspricht der source_name
in source_system
, wenn durch id
und code
übereinstimmen); Der Marker 'Primary'
ist speziell, aber neben 'Secondary'
kann es noch andere Marker geben.
Die Lösung enthält nicht die Zeilen von "mit" bis zum Abschluss ")" nach der Definition von target_system
; Die WITH-Klausel wird verwendet, um Testdaten innerhalb der Abfrage selbst zu generieren, aber im wirklichen Leben sollten Sie einfach mit select t.id, ...
beginnen und Ihre Basistabellen oder Ansichten treffen.
with
source_system (id, code, source_id, source_name) as (
select 123, 111, 'Monster', 'Dice.com' from dual union all
select 456, 111, 'Dice' , 'ABC COMPANY' from dual union all
select 456, 888, 'Ticv' , 'A2 systems' from dual union all
select 4566, 999, 'MOnster', 'hgtt solutions' from dual union all
select 789, 222, 'Monster', 'ABC COMPANY' from dual union all
select 985, 222, 'Dice' , 'Dice.com' from dual
),
target_system (recordid, ai_cl_id, source_name, op_code) AS (
select 123, 111, 'Dice.com' , 'Secondary' from dual union all
select 456, 111, 'ABC COMPANY', 'Primary' from dual union all
select 789, 222, 'ABC COMPANY', 'Secondary' from dual union all
select 985, 222, 'Dice.com' , 'Primary' from dual
)
select t.recordid, t.ai_cl_id, t.source_name, t.op_code
from target_system t inner join source_system s
on t.recordid = s.id and t.ai_cl_id = s.code
where (s.source_id = 'Monster' and t.op_code != 'Primary')
or
(s.source_id != 'Monster' and t.op_code = 'Primary')
order by ai_cl_id, recordid
;
Ausgang (mit Eingängen, die Ausgabe unterscheidet sich von dem in Ihrem Beitrag, da, was Sie in Ihrem Beitrag haben, ist falsch, wie ich erklärt).
RECORDID AI_CL_ID SOURCE_NAME OP_CODE
---------- ---------- ----------- ---------
123 111 Dice.com Secondary
456 111 ABC COMPANY Primary
789 222 ABC COMPANY Secondary
985 222 Dice.com Primary
Ihre Frage ist mir nicht klar und ich fürchte, andere Leser könnten genauso denken. Bitte versuchen Sie besser zu erklären, was Sie erreichen möchten. – Elyasin