MS Access SQL:从表1返回非';表2中的t

MS Access SQL:从表1返回非';表2中的t,sql,ms-access,ms-access-2010,Sql,Ms Access,Ms Access 2010,我正在使用MS Access SQL比较两个数据集,这似乎是StackOverflow上的一个常见问题 我发现了一个类似的问题,我认为这是一个有效的答案,但有一部分答案我不明白 链接: 被接受和投票最多的答案是: SELECT TableB.con_number FROM TableB WHERE NOT EXISTS (SELECT 1 FROM TableA WHERE TableA.con_number = Ta

我正在使用MS Access SQL比较两个数据集,这似乎是StackOverflow上的一个常见问题

我发现了一个类似的问题,我认为这是一个有效的答案,但有一部分答案我不明白

链接:

被接受和投票最多的答案是:

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

我不理解
SELECT 1
语句中的
1
。为什么会有
1

这个
1
可以是任何东西。如果你愿意,你可以把“屁”放在那里。但该子查询必须返回某些内容,以便“notexists”在
TableA.con_number=TableB.con_number

尽管如此,似乎更好的查询可能是:

SELECT TableB.con_number
FROM tableB
    LEFT JOIN TableA on
        TableB.con_number=TableA.con_number
WHERE tableA.Con_Number IS NULL
GROUP BY TableB.Con_number

除非我遗漏了这些表中的一些细微差别。

有一个MS Access查询向导来查找不匹配的表。我只掌握了足够的信息,足以造成危险,但我看到的信息表明,
左连接
效率低下。
LEFT JOIN
是否只有在存在某些表条件时才是低效的?的确,LEFT JOIN通常比内部JOIN效率低,但我可以保证,您为执行LEFT JOIN执行的相同功能而采取的任何变通方法都比LEFT JOIN本身的效率低。此外,在这种情况下,解决方法是使用派生表(子查询),这通常比左联接效率低。此外,这是Access,我们不是在谈论数亿条记录,所以无论哪种方式,您都可能没事。MS Access…目前为止。;)