У меня есть таблица ниже, примерно 3 миллиона строк.
at_id a.at_type_cd
1 red
2 blue
3 yellow
Я хочу добавить столбец, поэтому сделал следующее.
alter table ship.alt
add (src_ind char(1) null)
Теперь у меня есть таблица ниже:
at_id at_type_cd src_ind
1 red (null)
2 blue (null)
3 yellow (null)
Все значения в src_ind равны нулю. Я хочу добавить значения в src_ind на основе выбора из другой таблицы.
merge into &tableschema..alt dest
using (select /* parallel(a,16) */
x.at_id,
x.src_ind
from (select
a.at_id,
case
when alt.tracks_t is null
then 'H'
when alt.tracks_at = 1
then 'B'
else 'x'
end src_ind
from &tableschema..alt a
left join (select
alt.at_type,
alt.tracks_at
from &tableschema..at_tys@db alt
where alt.tracks_at <> 0) alt
on a.at_type_cd = alt.at_type
where 1=1)x ) src
on (src.at_id = dest.at_id)
when matched then
update set
dest.src_ind = src.src_ind
when not matched then
insert (src_ind)
values (src.src_ind)
С моей стороны это занимает более двух часов. Я не уверен, что это правильно, используя тест на глаз, есть ли более эффективный способ добавить значения столбцов на основе выбора?
update
vs insert
vs merge
Может быть insert
с где exist
?