LoginSignup
0
0

More than 5 years have passed since last update.

差分追加更新のためのSQL

Posted at

delete insert

  • redshiftの例引っ張ってきた
  • join version(昔ハマった)
  • ハマったときに諦めてやったin
delete_using.sql
delete from target 
using stage 
where target.primarykey = stage.primarykey;
delete_table_as.sql
delete a
from target as a
inner join stage
on target.primarykey = stage.primarykey;
delete_in.sql
delete
from target
where primarykey in (
  select primarykey from stage
)
delete_after.sql
insert into target 
select * from stage;

MERGE

merge into target
using stage
on target.primarykey = t2.primarykey
when matched then
  update set target.column_1 = stage.column_1
when not matched then
  insert values (stage.primarykey, stage.column_1)
;
INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
  ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
update target a 
set column_1 = column_1
from stage
where a.id = stage.id;

FULL OUTER JOIN

旧verも更新されつつ新verも更新されるパターンで使った

  • めんどう
  • 自由度が高い
full_outer.sql
select
  case
    when stage.primarykey is not null then stage.primarykey 
    else target.primarykey
  end as primarykey
  , case
    when stage.primarykey is not null then stage.column_1 
    else target.column_1
  end as column_1
  -- etc.
from target
full outer join stage
on target.primarykey = stage.primarykey
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0