我需要根据表2中多列的数据插入和删除表1中的记录。
示例:表 1 和表 2 具有相同的列:地址、城市、州和邮编。
表 1 是具有数百万条记录的主表。表 2(千条记录)是基于以某种方式更改的数据的表 - 尽管它可能不是此表中的数据更改。
匹配记录意味着地址、城市、州和邮政编码在两个表中的值相同。
所以我想做两个操作:
根据 Table1 的大小,我需要一种非常有效的方法来执行此操作。我知道一些 SQL - 但没有达到如果使用 SQL 完成所需的级别。
这是一个 DB2 数据库 - 版本 10.5。
操作 1
插入Table1
只存在于 中的记录Table2
:
INSERT INTO Table1
(address, city, state, zip)
SELECT address, city, state, zip FROM Table2
EXCEPT
SELECT address, city, state, zip FROM Table1 ;
Run Code Online (Sandbox Code Playgroud)操作2
从删除记录Table1
,其中记录不在Table2
,但city
在Table2
。
(假设列不可为空。如果它们允许空值,最好NOT IN
用NOT EXISTS
子查询重写):
DELETE FROM Table1
WHERE (address, city, state, zip)
NOT IN
(SELECT address, city, state, zip FROM Table2)
AND city IN
(SELECT city FROM Table2) ;
Run Code Online (Sandbox Code Playgroud)至于性能和效率,我对 DB2 的经验几乎为零,所以如果您等待其他答案会更好。但是所有列(address, city, state, zip)
上的索引——在两个表上——可能是你能为查询做的最好的,再加上一个单一的索引(city)
。或者也许将两个建议与所有 4 列合并在一个索引中,但选择city
索引的第一部分:(city, address, state, zip)
.
您尚未提供表的结构,但 4 列似乎适合UNIQUE
约束,因此您可能已经有了这样的索引。
归档时间: |
|
查看次数: |
30263 次 |
最近记录: |