Как правило, коррелированные подзапросы не для Netezza. Очевидно, вы можете использовать их во многих случаях, но часто за счет превращения платформы MPP в последовательный процессор. Плохо.
Вы можете переписать свою вставку несколькими способами, но это кажется мне самым ясным. Я понятия не имею, что эта логика пытается сделать, но я воспроизвел ее тем не менее. У вас может быть проблема, если view
содержит дубликаты; это может быть рассмотрено с немного более глубокими знаниями ваших данных.
insert into tableA (
a
,b
,c
,d
)
select
viw.a
,viw.b
,viw.c
,viw.d
from
view viw
join tableA tba on
(viw.a = tba.a)
or (
viw.a = tba.a
and viw.b <> tba.b
or viw.c <> tba.c
or viw.d <> tba.d
)
Вы можете удалить возможность просмотреть дубли, вставив в tableA
из фактической таблицы и использовать нашло там * ROWID'о. Возможно, что-то вроде этого:
create temporary table temp_view as
select * from view
distribute on (some_key);
Затем соберите rowids
вставить так:
insert into tableA (
a
,b
,c
,d
)
with mar as (--Match 'a' records.
select
viw.rowid insert_rowid
from
temp_view viw
join tableA tba using (a)
), mnb as (--Match against 'b'
select
viw.rowid
from
temp_view viw
join tableA tba on
viw.a = tba.a
and viw.b <> tba.b
or viw.c <> tba.c
or viw.d <> tba.d
), rws as (--All rowids.
select * from mar
union select * from mnb
)
select
a
,b
,c
,d
from
temp_view viw
join rws on rws.insert_rowid = viw.rowid;
Что случилось с вашей попытки решения? – Shadow
Синтаксис выражения 'case' неверен. Фактически удалите «case when», и это, вероятно, работает. – shawnt00
Даже после удаления случая он дает мне синтаксическую ошибку –