在Pandas中根据Table A的id匹配Table B行并合并生成新表
表合并与筛选解决方案
问题背景
现有两张表数据如下:
Table A
| id | week |
|---|---|
| f8y | 50 |
| ab5 | 50 |
Table B
| id | week |
|---|---|
| f8y | 40 |
| f8y | 35 |
| 2op | 23 |
需求:提取Table B中所有id存在于Table A中的行,再将这些行与Table A中对应id的行合并,生成按week升序排列的新表,期望输出如下:
期望输出
| id | week |
|---|---|
| f8y | 35 |
| f8y | 40 |
| f8y | 50 |
解决方案(SQL实现)
WITH common_ids AS ( -- 找出同时存在于Table A和Table B中的id SELECT DISTINCT id FROM TableA WHERE id IN (SELECT id FROM TableB) ) SELECT id, week FROM ( -- 提取Table B中符合条件的行 SELECT id, week FROM TableB WHERE id IN (SELECT id FROM common_ids) UNION ALL -- 提取Table A中对应id的行 SELECT id, week FROM TableA WHERE id IN (SELECT id FROM common_ids) ) AS combined_data ORDER BY week ASC;
步骤说明
- 步骤1:通过CTE
common_ids筛选出同时存在于两张表中的id(本例中仅f8y),避免后续重复判断。 - 步骤2:从Table B中提取id在
common_ids内的行,得到f8y对应的两条记录。 - 步骤3:从Table A中提取id在
common_ids内的行,得到f8y对应的一条记录。 - 步骤4:使用
UNION ALL合并两组数据(相比UNION,不会去重,效率更高,且本例无重复数据)。 - 步骤5:按
week字段升序排序,得到最终的有序结果。
内容的提问来源于stack exchange,提问作者nerd
相关产品推荐
相关产品推荐

