如何优化多列内连接的INSERT INTO...SELECT语句以更新指定字段
修正后的INSERT INTO...SELECT语句
原语句的问题在于多次内连接CUST_DAY0_MERGE会导致匹配多个旧ID的记录被重复插入,同时没有按照需求替换CUST_ID和CUST_SOURCE_UNIQUE_ID字段。以下是完全符合需求的修正语句:
INSERT INTO CUST_REVIEWS( CUST_REVIEW_ID, RUN_DATE, CUST_ID, CUST_SOURCE_UNIQUE_ID, CUST_SOURCE_REF_ID ) SELECT reviews.CUST_REVIEW_ID, reviews.RUN_DATE, merge.NEW_CUST_ID AS CUST_ID, merge.NEW_CUST_ID AS CUST_SOURCE_UNIQUE_ID, reviews.CUST_SOURCE_REF_ID FROM CUST_REVIEWS reviews INNER JOIN CUST_DAY0_MERGE merge ON reviews.CUST_SOURCE_REF_ID IN (merge.OLD_REF_ID_1, merge.OLD_REF_ID_2, merge.OLD_REF_ID_3);
关键修改说明:
- 简化连接逻辑:用一次
INNER JOIN配合IN子句,一次性匹配CUST_SOURCE_REF_ID与三个旧ID中的任意一个,避免多次连接带来的冗余数据和性能损耗。 - 替换目标字段:在
SELECT子句中,明确将CUST_ID和CUST_SOURCE_UNIQUE_ID设置为merge.NEW_CUST_ID,其余字段直接保留原CUST_REVIEWS表的取值。 - 可选去重优化:如果存在单条
CUST_REVIEWS记录同时匹配多个旧ID的场景,可以在SELECT后添加DISTINCT关键字,避免重复插入相同的新记录:
SELECT DISTINCT reviews.CUST_REVIEW_ID, reviews.RUN_DATE, merge.NEW_CUST_ID AS CUST_ID, merge.NEW_CUST_ID AS CUST_SOURCE_UNIQUE_ID, reviews.CUST_SOURCE_REF_ID
内容的提问来源于stack exchange,提问作者user2102665
相关产品推荐
相关产品推荐

