SAS/SQL中如何通过主键合并两张表,仅追加第二个表主键不重复的记录
主键匹配追加合并数据集方案
合并规则
本次合并以第一个数据集为基准,核心规则为:仅当第二个数据集中某条记录的主键值未在第一个数据集的主键列中出现时,才将该条记录追加到第一个数据集末尾,第一个数据集的原有记录不会被修改、覆盖。
示例演示
以下示例以学生序号
R.NO作为主键
基准数据集(数据集1)
Student R.NO age Kevin 1. 25 Tom. 2. 26 joe. 3. 24
该数据集已存在的主键值为1、2、3。
待匹配数据集(数据集2)
James. 1. 26 Stephnie 4. 21 Alaster. 3. 26
逐行校验主键后,仅主键值为4的Stephnie记录符合追加要求,其余记录的主键1、3均已在基准数据集存在,直接排除。
合并结果数据集
Student R.No. Age Kevin 1. 25 Tom. 2. 26 Joe. 3. 24 Stephnie 4. 21
常见场景实现代码
Python Pandas实现
假设df1为基准数据集、df2为待匹配数据集,主键列名为R.NO:
import pandas as pd # 提取基准数据集已存在的主键集合 exist_pk = set(df1['R.NO']) # 筛选待匹配数据集中符合追加要求的记录 append_data = df2[~df2['R.NO'].isin(exist_pk)] # 拼接得到最终结果 result = pd.concat([df1, append_data], ignore_index=True)
SQL实现
假设基准表为table1、待匹配表为table2,主键字段为r_no:
SELECT * FROM table1 UNION ALL SELECT * FROM table2 WHERE r_no NOT IN (SELECT r_no FROM table1);
内容的提问来源于stack exchange,提问作者Alastair
相关产品推荐
相关产品推荐

