首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在MS Access中实现SQL INTERSECT和MINUS操作

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

Stack Overflow用户
提问于 2008-12-03 13:54:05
回答 5查看 89.8K关注 0票数 21

我研究过,但还没有找到在MS Access中运行INTERSECT和MINUS操作的方法。有没有任何方式存在

EN

回答 5

Stack Overflow用户

发布于 2008-12-03 15:46:16

INTERSECT不是内联接。他们不一样。在INTERSECT不能执行的情况下,内联接将为您提供重复行。您可以通过以下方式获得相同的结果:

SELECT DISTINCT a.*
FROM a
INNER JOIN b
   on a.PK = b.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 ...

使用MINUS可以做同样的事情,但是使用左连接和WHERE条件检查表b的一个不可为空的列(最好是主键)上的null。

SELECT DISTINCT a.*
FROM a
LEFT JOIN b
   on a.PK = b.PK
WHERE b.PK IS NULL

这应该就行了。

票数 15
EN

Stack Overflow用户

发布于 2008-12-03 14:06:51

它们是通过连接来完成的。传统的方式:)

对于INTERSECT,可以使用内部联接。非常简单。如果没有纯粹的一对一关系,只需要使用GROUP BY或DISTINCT。否则,正如其他人所提到的,您可能会获得比预期更多的结果。

对于减号,您可以使用左连接并使用WHERE来限制它,这样您只能从主表中返回与左JOINed表不匹配的行。

很简单。

票数 3
EN

Stack Overflow用户

发布于 2008-12-03 14:07:54

不幸的是,MS Access不支持减号--一种解决办法是创建三个查询,一个包含完整的数据集,一个提取要筛选出的行,第三个查询将两个表连接在一起,只提取仅存在于完整数据集中的记录。

INTERSECT也是如此,除了您将通过一个内部连接并且只返回存在于两者中的记录之外。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/337158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档