如何将Testing1与Testing2的差异数据插入Testing3表并标记来源
解决方案
你可以通过UNION ALL合并两个查询分支,分别处理Testing1独有的数据和Testing2独有的数据,同时给各自的Source字段赋值对应的标记:
INSERT INTO Testing3 (ItemId, ItemPath, Source) -- 插入仅存在于Testing1的数据,标记来源为Testing1 SELECT pm.ItemID, pm.ItemPath, 'Testing1' AS Source FROM Testing1 pm WHERE NOT EXISTS( SELECT ec.ItemId FROM Testing2 ec WHERE ec.ItemID = pm.ItemID ) UNION ALL -- 插入仅存在于Testing2的数据,标记来源为Testing2 SELECT ec.ItemID, ec.ItemPath, 'Testing2' AS Source FROM Testing2 ec WHERE NOT EXISTS( SELECT pm.ItemId FROM Testing1 pm WHERE pm.ItemID = ec.ItemID );
补充说明
- 第一个查询块保留了你原有的筛选逻辑,新增
'Testing1' AS Source来指定来源标记; - 第二个查询块反向从Testing2取数,筛选出Testing1中不存在的记录,同时标记来源为
Testing2; - 选用
UNION ALL而非UNION是因为两个分支的结果不会有重复数据,UNION ALL的执行效率更高。
内容的提问来源于stack exchange,提问作者aasenomad
相关产品推荐
相关产品推荐

