在红移上更新表的正确语法是什么?(代码示例)



我想创建一个定时查询来每天更新Redshift上的现有表。

这个想法是,我想每天添加具有唯一key1和key2的事件的新行。此外,我想更新上周在value1, value2或value3中有更新的行,但是我想只在原始prod表中插入这些值时才插入这些值(因此我不能删除行并再次为key1和key2插入它们)。

我错过了正确的语法可能是因为下面的代码不工作。查询临时表工作正常。你能告诉我这里遗漏了什么吗?

红移文档示例在这里:https://docs.amazonaws.cn/en_us/redshift/latest/dg/merge-specify-a-column-list.html

create temp table [temp_table_name] as 
[SELECT * FROM temp_table_name]; 

begin transaction;

update [prod_table_name] 
set value1 = NVL(value1, temp_table_name.value1),
value2 = NVL(value2, temp_table_name.value1),
value3 = NVL(value3, temp_table_name.value1)
from [temp_table_name]
where key1 = temp_table_name.key1
and key2 = temp_table_name.key2
and key3 = temp_table_name.key3
and key4 = temp_table_name.key4;
insert into [prod_table_name]
select *
from [temp_table_name]
where value1 <> temp_table_name.value1 
and value2 <> temp_table_name.value2;

end transaction;

我遇到各种各样的错误,找不到问题在哪里。

我怀疑问题出在"key1"one_answers";value1"。我认为您需要在WHERE子句中通过名称指定目标表。这样的:

where prod_table_name.key1 = temp_table_name.key1

:

where prod_table_name.value1 <> temp_table_name.value1 

相关内容

  • 没有找到相关文章

最新更新