Использование вставки и обновления для «когда сопоставлено, то» // объединить - PullRequest
0 голосов
/ 19 февраля 2020

Можно ли использовать ВСТАВКУ И ОБНОВЛЕНИЕ на When matched then? ? Я видел в Интернете, что это возможно, поэтому мой вопрос: как я могу сделать что-то вроде ниже?

create table target_table(a, b, c, d, e) as (
   select 1, 2, 'NO',  100,'MDE' from dual union all
   select 1, 3, 'NO',  100,'AGC' from dual union all
   select 1, 4, 'NO',  100,'MDE' from dual union all
   select 1, 6, 'YES',  100,'MDE' from dual union all
   select 1, 5, 'NO',  100,'MDE' from dual );


create table source_table(a, b, c, d, e) as (
   select 1, 0, 'NO',  200,'AGC'  from dual union all
   select 1, 1, 'NO',  200,'MDE'  from dual union all
   select 1, 3, 'YES', 200,'AGC'  from dual union all
   select 1, 4, 'NO',  200,'MDE'  from dual union all
   select 1, 5, 'YES', 200,'MDE'  from dual );


merge into target_table t
using source_table s
on (t.a = s.a and t.b = s.b)
when matched then 
case 
      when t.c = 'NO' and s.c = 'YES' and t.e = 'MDE' and s.e = 'MDE' then update set t.d = s.d, t.c = s.c
      when t.e <> 'MDE' and s.e <> 'MDE' then insert values (s.a, s.b, s.c, s.d, s.e)
end 
when not matched then insert values (s.a, s.b, s.c, s.d, s.e);

1 Ответ

2 голосов
/ 19 февраля 2020

Давайте разберемся. Первый https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqlrf/MERGE.html#GUID -5692CCB7-24D9-4C0E-81A7-A22436DC968F

  • соответствует -> обновить / удалить
  • не найдено -> вставить

Микширование не допускается.

Таким образом, вы хотите вставить, когда te и se равны! = 'MDE' или (ta = sa и tb = sb) И обновление только при t. c = 'НЕТ' и s. c = 'ДА' и te = 'MDE' и se = 'MDE'

Итак, вы попробовали:

merge into target_table t
using source_table s
on (t.a = s.a and t.b = s.b and not ( t.e <> 'MDE' and s.e <> 'MDE'))
when matched then 
    update set t.d = s.d, t.c = s.c 
    where t.c = 'NO' and s.c = 'YES' and t.e = 'MDE' and s.e = 'MDE' 
when not matched then insert values (s.a, s.b, s.c, s.d, s.e)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...