我尝试了很多不同的东西,但总是会出现语法错误。
我有两个表 - tableA和tableB。它们都有一个con_number字段作为唯一ID。 我想选择tableB中不存在于tableA中的所有行。
任何人都可以在MS Access中提供此查询吗?
我知道在这种情况下使用NOT IN是非常低效的,所以如果有更好的方法,那就太棒了。
感谢。
答案 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