问题描述
在使用 DB2 时,我有 2 个表:
TABLE_A >
2 列:CLaim_ID、CODEID_A
TABLE_B >
2 列:CLaim_ID、CODEID_B
目标是编写一条 DB2 Update 语句,检查 TABLE_A 的 CLaim_ID 是否与 TABLE_B 的 CLaim_ID 相同,然后将 CODEID_A(TABLE_A 的 CLaim_ID 的)替换为 CODEID_B(TABLE_B 的 CLaim_ID 的)。
TABLE_A 和 TABLE_B 都有大约 4 亿行。 VSch 是架构名称。
发现相关子查询应该可以工作:
UPDATE MY_SCHEMA.TABLE_A apc SET CODEID_A = (SELECT TABLE_B.CODEID_B FROM SCHEMA_2.TABLE_B TABLE_B
WHERE TABLE_B.CLaim_ID = apc.CLaim_ID)
WHERE EXISTS (SELECT 1 FROM SCHEMA_2.TABLE_B TABLE_B WHERE (TABLE_B.CLaim_ID = apc.CLaim_ID));
这是两个表中的列结构和索引的详细信息 - TableA 和 TableB: https://codeshare.io/armxAv
我的问题是,如果我们在这里使用摄取而不是更新,会更快吗?
如果我们通过 DB2 Ingest 路由,我们可以首先 DB2 将要更新的值列表从 TABLE_B 提取到一个 FLAT 文件中,然后从该 FLAT 文件中执行一个 DB2 INGEST 到 TABLE_A 中。
就时间复杂度而言,这是一种有效的方法吗?如果是,有人可以帮助我进行相同的摄取查询吗?
解决方法
您也可以考虑使用 MERGE 语句
MERGE INTO tablea a
USING (SELECT claimsid_b,codeid_b FROM tableb) b
ON (a.claimsid_a = b.claimsid_b)
WHEN MATCHED THEN
UPDATE SET
a.codeid_a = b.codeid_b
附注。未经测试,直接在此处输入..但您明白了...