如何在MS Access中实现SQL INTERSECT和MINUS操作

Var*_*jan 21 sql database ms-access

我已经研究过并且没有找到在MS Access中运行INTERSECT和MINUS操作的方法.有任何方式存在

Lep*_*R64 31

INTERSECT是一个内部联接.MINUS是一个外连接,您只能选择另一个表中不存在的记录.


相交

select distinct
  a.*
from
  a
  inner join b on a.id = b.id
Run Code Online (Sandbox Code Playgroud)

减去

select distinct
  a.*
from
  a
  left outer join b on a.id = b.id
where
  b.id is null
Run Code Online (Sandbox Code Playgroud)

如果您编辑原始问题并发布一些示例数据,则可以给出一个示例.

编辑:忘记添加到查询的不同.


Dav*_*kle 14

INTERSECT不是内部联合.他们是不同的.如果INTERSECT不能,INNER JOIN会给你重复的行.你可以得到相同的结果:

SELECT DISTINCT a.*
FROM a
INNER JOIN b
   on a.PK = b.PK
Run Code Online (Sandbox Code Playgroud)

请注意,PK必须是主键列.如果表上没有PK(坏!),你必须这样写:

SELECT DISTINCT a.*
FROM a
INNER JOIN b
   ON  a.Col1 = b.Col1
   AND a.Col2 = b.Col2
   AND a.Col3 = b.Col3 ...
Run Code Online (Sandbox Code Playgroud)

使用MINUS,您可以执行相同的操作,但使用LEFT JOIN,并且WHERE条件在表b的不可为空的列(最好是主键)之一上检查null.

SELECT DISTINCT a.*
FROM a
LEFT JOIN b
   on a.PK = b.PK
WHERE b.PK IS NULL
Run Code Online (Sandbox Code Playgroud)

应该这样做.