我研究过,但还没有找到在MS Access中运行INTERSECT和MINUS操作的方法。有没有任何方式存在
发布于 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
这应该就行了。
发布于 2008-12-03 14:06:51
它们是通过连接来完成的。传统的方式:)
对于INTERSECT,可以使用内部联接。非常简单。如果没有纯粹的一对一关系,只需要使用GROUP BY或DISTINCT。否则,正如其他人所提到的,您可能会获得比预期更多的结果。
对于减号,您可以使用左连接并使用WHERE来限制它,这样您只能从主表中返回与左JOINed表不匹配的行。
很简单。
发布于 2008-12-03 14:07:54
不幸的是,MS Access不支持减号--一种解决办法是创建三个查询,一个包含完整的数据集,一个提取要筛选出的行,第三个查询将两个表连接在一起,只提取仅存在于完整数据集中的记录。
INTERSECT也是如此,除了您将通过一个内部连接并且只返回存在于两者中的记录之外。
https://stackoverflow.com/questions/337158
复制相似问题