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

Bry*_*yan 10 sql ms-access ms-access-2007

目的:

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

当前查询:

SELECT DISTINCT Table1.Column1
FROM Table2, Table1
WHERE Table1.Column1 <> Table2.Column1 
Run Code Online (Sandbox Code Playgroud)

查询结果:

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

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

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

RBa*_*ung 17

像这样

SELECT DISTINCT Table1.Column1
FROM Table1
WHERE NOT EXISTS( SELECT * FROM Table2
    WHERE Table1.Column1 = Table2.Column1  )
Run Code Online (Sandbox Code Playgroud)

你想要不存在,而不是"不等于"


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

FROM Table1, Table2
Run Code Online (Sandbox Code Playgroud)

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

FROM Table1 CROSS JOIN Table2
Run Code Online (Sandbox Code Playgroud)

  • Jet/ACE SQL不支持CROSS JOIN. (2认同)