db2 在增量表中没有匹配项时进行查询以删除记录

lkaoscv7  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(160)

请帮助编写一个更好的删除查询。DB2在合并中没有“未按源匹配”。需要从源文件中删除与某个ID的代码不匹配的行,并且只需要删除源文件中存在该ID的行。

delete from target
   where ID in ( select ID from source)
         and 
      ID concat Code NOT in ( Select S.ID concat S.Code from source S)

样本数据

target             source 
ID   code         ID   code         
1    ABC          1     ABC     
1    DEF          1     DEF
1    IJK
2    ABC
2    XYZ

需要从目标中单独删除值ID=1 & code=IJK行

afdcj2ne

afdcj2ne1#

您可以执行:

delete from target
where (id, code) in (
  select t.id, t.code
  from target t
  left join source s on (s.id, s.code) = (t.id, t.code)
  where s.id is null and t.id in (select id from source)
);

结果:

ID  CODE 
 --- ---- 
 1   ABC  
 1   DEF  
 2   ABC  
 2   XYZ

请参阅db<>fiddle上的运行示例。
我确信可以使用DELETE & JOIN或使用EXISTS而不是IN来压缩语法,但这个示例应该是一个很好的解决方案。

相关问题