我写了以下查询,我认为它是正确的,但我有一个“缺少运算符”错误。
SELECT * FROM results,Types WHERE results.a=Types.b
INTERSECT SELECT * FROM results,Types WHERE results.c=Types.b
有人可以帮我吗?
非常感谢。
我写了以下查询,我认为它是正确的,但我有一个“缺少运算符”错误。
SELECT * FROM results,Types WHERE results.a=Types.b
INTERSECT SELECT * FROM results,Types WHERE results.c=Types.b
有人可以帮我吗?
非常感谢。
你用的是什么数据库?你确定intersect
支持吗?我在 Oracle 上尝试了您的查询(将表名更改为与我的数据库相对应的名称),它工作正常。
编辑:既然您确认您使用的是 MS-Access,那么很明显 INTERSECT 是问题所在,因为 MS-Access 不支持它:http ://www.access-programmers.co.uk/forums/archive/index.php /t-86531.html
EDIT2:这是未经测试的,但基本思想是您需要在第一个查询中找到第二个查询中存在的所有行。为此,您必须比较两个查询之间的每一列是否匹配,因为所有列都必须匹配才能成为“相交”行。
可能存在一些语法问题,但希望这可以帮助您入门。
SELECT r.col1
, t.col1
/* list all other columns here */
FROM results r
, types t
WHERE r.a = t.b
AND EXISTS (
SELECT *
FROM results r2
, types t2
WHERE r2.c = t2.b
AND NZ(r.col1,0) = NZ(r2.col1,0)
AND NZ(t.col1,0) = NZ(t2.col1,0)
/* list other columns here, they all need to match so intersection will work */
)
非 ANSI 连接可能会造成混淆
SELECT * FROM results R JOIN Types T ON R.a = T.b
INTERSECT
SELECT * FROM results R JOIN Types T ON R.c = T.b
我建议分别测试每个SELECT
语句。确保他们自己工作。然后做INTERSECT
.
例如,如果您正在使用 SQL Server,那么这不是引用两个表的正确方法。您需要添加一个JOIN
子句(ON
指定列到JOIN
)。
即使不是 SQL Server,您也需要确保每个查询都可以独立运行。
编辑:有人在这里问过我如何在 MS Access 中实现 SQL INTERSECT 和 MINUS 操作。我在那里看到了意见分歧,所以一定要测试你的结果,以确保你得到你想要的。
仅当您想查找单个查询产生的公共行时才使用 INTERSECT 语句。你是声明:
" SELECT * FROM results,Types WHERE results.a=Types.b
INTERSECT SELECT * FROM results,Types WHERE results.c=Types.b "
不符合关节工作所需的标准。“WHERE”子句造成了问题。
如果 results.a<>results.c :than u...没有什么可以相交的。