当 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 中的 运行 示例。
我确定可以使用 DELETE
和 JOIN
或使用 EXISTS
而不是 IN
来压缩语法,但这个示例应该是一个很好的解决方案。
请帮助编写更好的删除查询。 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 中的 运行 示例。
我确定可以使用 DELETE
和 JOIN
或使用 EXISTS
而不是 IN
来压缩语法,但这个示例应该是一个很好的解决方案。