作爲一般規則,相關子查詢不適用於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'表達式的語法是錯誤的。事實上,刪除'案件時,它可能工作。 – shawnt00
即使在刪除大小寫之後,它給我的語法錯誤 –