Что происходит в SQL-слиянии, если условие соединения имеет два неуникальных столбца и как их решить? - PullRequest
0 голосов
/ 27 сентября 2018

Я использую следующий запрос.Я использовал отдельное предложение для получения уникальных значений, но получаю ORA-30926: невозможно получить стабильный набор строк в исходных таблицах, поскольку col1 и col2 не являются уникальными

merge into TargetTable t
using (
       select distinct s.col1, s.col2, s.col3 
       from SourceTable s
) st on st.col1 = t.col1 and st.col2 = t.col2
when matched then update
     set t.col3 = st.col3

Образец данных:

Col1    Col2    Col3
----------------------
Cust1   Bank1   Addr1
Cust2   Bank2   Addr2
Cust3   Bank3   Addr3
Cust2   Bank1   Addr4
Cust3   Bank1   Addr5
Cust1   Bank2   Addr6
Cust3   Bank1   Addr7
Cust2   Bank1   Addr8
Cust1   Bank3   Addr9

1 Ответ

0 голосов
/ 27 сентября 2018

Поскольку ваша ошибка означает, что у вас есть какие-то дубликаты данных, поэтому для их удаления вы можете использовать агрегацию col3, а затем попробовать, как показано ниже:

merge into TargetTable T
using (
       select S.col1,S.col2,max(S.col3) as col3
       from SourceTable S group by S.col1,S.col2
) ST on ST.col1 = t.col1 and ST.col2 = T.col2
when matched then update set T.col3 = ST.col3
...