基于MS-Access的两组复杂数据集对比分析需求
在MS Access中对比两张数据集表的实用方案
Hey there, 我看你正在用MS Access处理两张表的对比分析,先把你给出的示例数据整理成清晰的表格,然后针对常见的对比需求给你写好可直接运行的Access SQL查询:
示例数据表
Table 1
| ID | Name |
|---|---|
| 1 | Zoie |
| 2 | Rohan |
| 2 | Simon |
| 3 | Jerome |
| 4 | Jakob |
| 4 | Mathew |
| 4 | Cora |
| 6 | Keely |
| 7 | Aiyana |
| 7 | Jake |
| 8 | Reid |
| 9 | Emerson |
Table 2
| ID | Name |
|---|---|
| 1 | Michael |
| 2 | Rohan |
| 2 | Simon |
| 3 | Jill |
| 4 | Jakob |
| 4 | Cora |
| 5 | Charlie |
| 7 | John |
| 8 | Reid |
| 9 | Yadi |
常见对比场景及实现方法
1. 找出两张表中ID和Name完全匹配的记录
这些是两张表中完全一致的条目,适合用来确认重合数据:
SELECT t1.ID, t1.Name FROM Table1 AS t1 INNER JOIN Table2 AS t2 ON t1.ID = t2.ID AND t1.Name = t2.Name;
运行后你会得到像ID=2的Rohan/Simon、ID=4的Jakob/Cora这类完全匹配的记录。
2. 找出相同ID但Name不一致的记录
用来定位同一ID下名称有差异的情况,比如ID=1、3、7、9这些:
SELECT t1.ID, t1.Name AS Table1_Name, t2.Name AS Table2_Name FROM Table1 AS t1 INNER JOIN Table2 AS t2 ON t1.ID = t2.ID WHERE t1.Name <> t2.Name;
这个查询会把两边ID相同但名字不一样的记录列出来,方便你核对差异。
3. 找出仅在Table1中存在的记录(Table2没有的ID或Name)
包括Table1有但Table2完全没有的ID,以及同ID下Table1多出来的Name(比如ID=4的Mathew,ID=6的Keely):
SELECT t1.ID, t1.Name FROM Table1 AS t1 LEFT JOIN Table2 AS t2 ON t1.ID = t2.ID AND t1.Name = t2.Name WHERE t2.ID IS NULL;
4. 找出仅在Table2中存在的记录
类似上面,比如ID=5的Charlie,ID=7的John这些:
SELECT t2.ID, t2.Name FROM Table2 AS t2 LEFT JOIN Table1 AS t1 ON t2.ID = t1.ID AND t2.Name = t1.Name WHERE t1.ID IS NULL;
5. 汇总所有差异(合并上述3、4的结果)
如果需要一次性看两边所有独有的记录,可以用UNION ALL合并结果:
SELECT t1.ID, t1.Name, '仅在Table1' AS 来源 FROM Table1 AS t1 LEFT JOIN Table2 AS t2 ON t1.ID = t2.ID AND t1.Name = t2.Name WHERE t2.ID IS NULL UNION ALL SELECT t2.ID, t2.Name, '仅在Table2' AS 来源 FROM Table2 AS t2 LEFT JOIN Table1 AS t1 ON t2.ID = t1.ID AND t2.Name = t1.Name WHERE t1.ID IS NULL;
内容的提问来源于stack exchange,提问作者Mario
相关产品推荐
相关产品推荐

