我尝试了很多不同的方法,但总是出现语法错误。
我有两个表 - tableA 和 tableB。它们都有一个 con_number 字段作为唯一标识符。 我想选择在 tableA 中不存在的所有行。
请问有人可以给我这个查询吗?在 MS Access 中应该怎么写呢?
我知道在这种情况下使用 NOT IN 是相当低效的,如果有更好的方法那就太棒了。
谢谢。
SELECT TableB.con_number
FROM TableB
WHERE NOT EXISTS (SELECT 1
FROM TableA
WHERE TableA.con_number = TableB.con_number);
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 语句为:
SELECT TableB.con_number
FROM TableB LEFT JOIN TableA
ON TableB.con_number = TableA.con_number
WHERE TableA.con_number Is Null
我记得有类似这样的:
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