DB2中如何单次执行Inner Join与表更新操作?
合并更新与关联查询的单次执行方案
你不需要实际修改table2的数据,而是可以在查询阶段直接模拟出更新后的状态,再与table1关联,一次SQL就能完成需求。以下是实现代码:
SELECT T1.ID, T1.ITEM_1, T1.Application, T2_processed.ID AS T2_ID, T2_processed.ITEM_2, T2_processed.Description, T2_processed.FINAL_STATUS AS STATUS FROM TABLE_1 T1 INNER JOIN ( SELECT *, -- 针对同ITEM_2且原STATUS=0的记录,仅保留第一条状态为0,其余改为9 CASE WHEN STATUS = 0 AND ROW_NUMBER() OVER (PARTITION BY ITEM_2 ORDER BY ID) > 1 THEN 9 ELSE STATUS END AS FINAL_STATUS FROM TABLE_2 ) T2_processed ON T1.ITEM_1 = T2_processed.ITEM_2 WHERE T2_processed.FINAL_STATUS = 0;
逻辑说明
- 子查询
T2_processed中,使用ROW_NUMBER()窗口函数按ITEM_2分组、ID排序,给每组内的记录编号。 - 通过
CASE语句判断:如果原记录STATUS=0且在分组内的序号大于1,就将其状态设为9,否则保留原状态,得到FINAL_STATUS。 - 最后将处理后的
T2_processed与table1做内连接,筛选FINAL_STATUS=0的记录,结果和你先更新再查询的输出完全一致。
这种方式无需修改原表数据,避免了额外的更新操作,同时保证逻辑和原流程一致。
内容的提问来源于stack exchange,提问作者user20927422
相关产品推荐
相关产品推荐

