使用 SQL Where Exists() 过滤结果

Filtering results using SQL Where Exists()

我使用的软件 允许我输入 WHERE... 部分 SQL 语句.

所以我可以在where子句中使用EXISTS()语句...

然而,

这个查询...

SELECT DISTINCT Left([PR].[WBS1],5)&"-000" AS WBS1
FROM PR
GROUP BY Left([PR].[WBS1],5), Right([PR].[WBS1],3), PR.Status
HAVING ((Right(PR.WBS1,3)<>'000') And ((PR.Status)='A') And (Count(PR.Org))>1)

...returns 78 条记录。

几乎与 WHERE EXISTS 相同的查询...

SELECT PR.WBS1 FROM PR WHERE EXISTS (

SELECT DISTINCT Left([PR].[WBS1],5)&"-000" AS WBS1
FROM PR
GROUP BY Left([PR].[WBS1],5), Right([PR].[WBS1],3), PR.Status
HAVING ((Right(PR.WBS1,3)<>'000') And ((PR.Status)='A') And (Count(PR.Org))>1)

)

...return 全部 31,114 条记录.

而且我真的不明白为什么。

我做错了什么;有人可以给我解释一下吗?

编辑:我可以在此处放置什么 return 相同的 78 条记录:

SELECT * FROM PR WHERE (

     ?

)

我使用的会计软件只允许我编辑 'where' 部分。

EXISTS returns TRUE 如果括号内的子查询 returns 至少 1 行或 FALSE 如果子查询不 return任意行。

在你的例子中子查询 returns 78 行,所以 EXISTS returns TRUE.

所以你的第二个查询等同于:

SELECT PR.WBS1 FROM PR WHERE 1=1 -- any boolean expression that returns TRUE

或者简单地说:

SELECT PR.WBS1 FROM PR