sql – 批量更新Redshift中的现有行

前端之家收集整理的这篇文章主要介绍了sql – 批量更新Redshift中的现有行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这似乎应该很容易,但事实并非如此.我正在将查询MySQL迁移到表格的Redshift:
  1. INSERT INTO table
  2. (...)
  3. VALUES
  4. (...)
  5. ON DUPLICATE KEY UPDATE
  6. value = MIN(value,VALUES(value))

对于主键,我们正在插入表中尚未插入的主键.对于已在表中的主键,我们根据取决于行中现有值和新值的条件更新行的值.

http://docs.aws.amazon.com/redshift/latest/dg/merge-replacing-existing-rows.html不起作用,因为在我的情况下filter_expression取决于表中的当前条目.我正在创建一个临时表,使用COPY语句插入其中,并试图找出合并登台表和真实表的最佳方法.

解决方法

我现在必须为一个项目做这件事.我正在使用的方法涉及3个步骤:

1.

运行更新以解决已更改的字段(我正在更新字段是否已更改,但您当然可以限定该字段):

  1. update table1 set col1=s.col1,col2=s.col2,...
  2. from table1 t
  3. join stagetable s on s.primkey=t.primkey;

2.

运行一个解决新记录的插入:

  1. insert into table1
  2. select s.*
  3. from stagetable s
  4. left outer join table1 t on s.primkey=t.primkey
  5. where t.primkey is null;

3.

将源中的行不再标记为非活动状态(我们的报告工具使用过滤非活动记录的视图):

  1. update table1
  2. set is_active_flag='N',last_updated=sysdate
  3. from table1 t
  4. left outer join stagetable s on s.primkey=t.primkey
  5. where s.primkey is null;

猜你在找的MsSQL相关文章