【问题标题】:Filtering results using SQL Where Exists()使用 SQL Where Exists() 过滤结果
【发布时间】:2022-01-03 01:56:14
【问题描述】:

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

所以我可以在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)

...返回 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)

)

...返回所有 31,114 条记录

我真的不明白为什么。

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

编辑:我可以在这里放什么来返回相同的 78 条记录:

SELECT * FROM PR WHERE (

     ?

)

我使用的会计软件只允许我编辑“位置”部分。

【问题讨论】:

    标签: sql group-by where-clause exists


    【解决方案1】:

    如果括号内的子查询返回至少 1 行,则EXISTS 返回 TRUE,如果子查询未返回任何行,则返回 FALSE

    在您的情况下,子查询返回 78 行,因此 EXISTS 返回 TRUE

    所以你的第二个查询相当于:

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

    或者简单地说:

    SELECT PR.WBS1 FROM PR 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-15
      • 1970-01-01
      • 2013-09-28
      • 2023-01-11
      • 2014-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多