sql – 批量更新Redshift中的现有行
发布时间:2020-12-12 07:07:03 所属栏目:MsSql教程 来源:网络整理
导读:这似乎应该很容易,但事实并非如此.我正在将查询从 MySQL迁移到表格的Redshift: INSERT INTO table(...)VALUES(...)ON DUPLICATE KEY UPDATE value = MIN(value,VALUES(value)) 对于主键,我们正在插入表中尚未插入的主键.对于已在表中的主键,我们根据取决于行
这似乎应该很容易,但事实并非如此.我正在将查询从
MySQL迁移到表格的Redshift:
INSERT INTO table (...) VALUES (...) ON DUPLICATE KEY UPDATE value = MIN(value,VALUES(value)) 对于主键,我们正在插入表中尚未插入的主键.对于已在表中的主键,我们根据取决于行中现有值和新值的条件更新行的值. http://docs.aws.amazon.com/redshift/latest/dg/merge-replacing-existing-rows.html不起作用,因为在我的情况下filter_expression取决于表中的当前条目.我正在创建一个临时表,使用COPY语句插入其中,并试图找出合并登台表和真实表的最佳方法. 解决方法我现在必须为一个项目做这件事.我正在使用的方法涉及3个步骤:1. 运行更新以解决已更改的字段(我正在更新字段是否已更改,但您当然可以限定该字段): update table1 set col1=s.col1,col2=s.col2,... from table1 t join stagetable s on s.primkey=t.primkey; 2. 运行一个解决新记录的插入: insert into table1 select s.* from stagetable s left outer join table1 t on s.primkey=t.primkey where t.primkey is null; 3. 将源中的行不再标记为非活动状态(我们的报告工具使用过滤非活动记录的视图): update table1 set is_active_flag='N',last_updated=sysdate from table1 t left outer join stagetable s on s.primkey=t.primkey where s.primkey is null; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |