如何在MS Access中正确使用“不等于”?

时间:2010-02-05 22:06:27

标签: sql ms-access ms-access-2007

目的:

此查询的目的是选择一列中不存在于不同表中的类似列中的所有不同值。

当前查询:

SELECT DISTINCT Table1.Column1
FROM Table2, Table1
WHERE Table1.Column1 <> Table2.Column1 

查询结果:

当我尝试运行此查询时会发生什么事情,进度条几乎立即填满,然后它几乎冻结,并且我没有做任何其他事情。当我使用=符号而不是&lt;&gt;它会输出相等的值,如果我将Table2.Column1替换为实际的实际值,它就可以正常工作。

我只是在输入这个问题时再次运行它,上面的查询这次给了我一个答案,但是它具有列的所有DISTINCT值,并不是所有值都只对该表有所独有。

关于我在这里做错了什么或遗失的任何想法?

3 个答案:

答案 0 :(得分:17)

喜欢这个

SELECT DISTINCT Table1.Column1
FROM Table1
WHERE NOT EXISTS( SELECT * FROM Table2
    WHERE Table1.Column1 = Table2.Column1  )

你想要不存在,而不是“不等于”


顺便说一句,你很少想写这样的FROM子句:

FROM Table1, Table2

因为这意味着“FROM Table1中每一行的所有组合与Table2中的每一行......”通常这比您想要看到的结果行多得多。在极少数情况下,您确实希望这样做,更常用的语法是:

FROM Table1 CROSS JOIN Table2

答案 1 :(得分:2)

在Access中,除非您的表格非常小​​,否则您可能会发现加入更快:

SELECT DISTINCT Table1.Column1
FROM Table1 
LEFT JOIN Table2
ON Table1.Column1 = Table2.Column1  
WHERE Table2.Column1 Is Null

这将从列表中排除表2中匹配的所有记录。

答案 2 :(得分:0)

我一直在努力获得一个查询来返回表1中表2中不存在的字段,并尝试了上面的大部分答案,直到我找到了一种非常简单的方法来获得我想要的结果。

我将表1和表2之间的连接属性设置为第三个设置(3)(表1中的所有字段以及表2中连接字段相等的那些记录)并在条件字段中放置一个Is Null我正在测试的字段中表2中的查询。它运作得很好。

感谢以上所有。