当 delta table 中没有匹配时查询删除记录

Query to delete record when no matching in delta table

请帮助编写更好的删除查询。 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 的行

你可以这样做:

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 中的 运行 示例。

我确定可以使用 DELETEJOIN 或使用 EXISTS 而不是 IN 来压缩语法,但这个示例应该是一个很好的解决方案。