使用 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
我使用的软件 仅 允许我输入 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