如何在一个表中获取MS Access中不在另一个表中的所有行?

时间:2009-04-07 06:26:53

标签: sql ms-access

我尝试了很多不同的东西,但总是会出现语法错误。

我有两个表 - tableA和tableB。它们都有一个con_number字段作为唯一ID。 我想选择tableB中不存在于tableA中的所有行。

任何人都可以在MS Access中提供此查询吗?

我知道在这种情况下使用NOT IN是非常低效的,所以如果有更好的方法,那就太棒了。

感谢。

4 个答案:

答案 0 :(得分:18)

SELECT TableB.con_number
FROM TableB
WHERE NOT EXISTS (SELECT 1 
                  FROM TableA 
                  WHERE TableA.con_number = TableB.con_number);

答案 1 :(得分:2)

NOT IN版本(缓慢但确定):

SELECT con_number
FROM TableB
WHERE con_number NOT IN (SELECT con_number FROM tableA);

实验版(不知道这是否更快,只需尝试一下):

SELECT B.con_number, MAX(A.con_number) AS check
FROM tableB B LEFT JOIN tableA A ON B.con_number = A.con_number
GROUP BY B.con_number
HAVING check IS NULL;

注意:两者都应该是相当标准的SQL,我不知道任何ms访问特定的功能

答案 2 :(得分:2)

有一个Find Unmatched向导可以设置它。 SQL是:

SELECT TableB.con_number
FROM TableB LEFT JOIN TableA 
ON TableB.con_number = TableA.con_number
WHERE TableA.con_number Is Null

答案 3 :(得分:0)

我记得像这样的东西:

SELECT * FROM TableA.* LEFT JOIN TableB _
    ON TableA.con_number = TableB.con_number WHERE 'criteria'

但我不记得使用哪个“标准”

... TableA.con_number <> TableB.con_Number
... TableB.con_number IS NULL
... TableA.con_number NOT like TableB.con_Number