如何在Access中查询并对比未关联的远程数据库
Access中对比两个远程数据库的方法
我有两个远程Access数据库(A.accdb和B.accdb),可通过另一Access数据库使用以下方式查询单表数据:
SELECT * FROM (SELECT * FROM DGConcept IN 'C:\Users\Gusto\Desktop\A.accdb') SELECT * FROM (SELECT * FROM DGConcept IN 'C:\Users\Gusto\Desktop\B.accdb')
两张表的数据如下:
表A
| ID | DESCRIPTION |
|---|---|
| 1 | Jesse Pinkman |
| 2 | Skyler White |
| 3 | Henk Schrader |
表B
| ID | DESCRIPTION |
|---|---|
| 1 | Jesse Pinkman |
| 2 | Skyler White |
| 3 | Henk Schrader |
| 4 | Saul Goodman |
尝试用以下语句对比两张表,但未返回任何结果:
SELECT * FROM (SELECT * FROM DGConcept IN 'C:\Users\Gusto\Desktop\A.accdb') x LEFT JOIN (SELECT * FROM DGConcept IN 'C:\Users\Gusto\Desktop\B.accdb') y ON (x.[ID] = y.[ID]) WHERE ((y.ID) Is Null)
问题原因
原语句使用左连接将A表关联到B表,目的是找出A表存在但B表不存在的记录,但实际需求是找出B表存在但A表不存在的记录(即ID=4的Saul Goodman),逻辑方向错误。
正确查询方法
方法1:调整连接方向(右连接或交换表位置的左连接)
交换表位置后使用左连接,直接查询B表中A表没有的记录:
SELECT y.* FROM (SELECT * FROM DGConcept IN 'C:\Users\Gusto\Desktop\B.accdb') y LEFT JOIN (SELECT * FROM DGConcept IN 'C:\Users\Gusto\Desktop\A.accdb') x ON y.[ID] = x.[ID] WHERE x.ID Is Null
或者使用右连接:
SELECT y.* FROM (SELECT * FROM DGConcept IN 'C:\Users\Gusto\Desktop\A.accdb') x RIGHT JOIN (SELECT * FROM DGConcept IN 'C:\Users\Gusto\Desktop\B.accdb') y ON x.[ID] = y.[ID] WHERE x.ID Is Null
方法2:使用NOT EXISTS子查询(更直观)
通过子查询判断B表的记录是否在A表中不存在:
SELECT * FROM DGConcept IN 'C:\Users\Gusto\Desktop\B.accdb' WHERE NOT EXISTS ( SELECT 1 FROM DGConcept IN 'C:\Users\Gusto\Desktop\A.accdb' WHERE DGConcept.ID = [DGConcept IN 'C:\Users\Gusto\Desktop\B.accdb'].ID )
期望结果
执行上述任一语句后,将得到以下结果:
| ID | DESCRIPTION |
|---|---|
| 4 | Saul Goodman |
内容的提问来源于stack exchange,提问作者MK01111000
相关产品推荐
相关产品推荐

