我是一个开始SQL程序员 - 我得到了大多数东西,但不是EXISTS.
它在我看来,并通过文档查看整个EXISTS语句返回一个布尔值.
但是,我看到了可以使用它的具体示例,并返回表的一部分,而不是全部或不返回.
SELECT DISTINCT PNAME
FROM P
WHERE EXISTS
(
SELECT *
FROM SP Join S ON SP.SNO = S.SNO
WHERE SP.PNO = P.PNO
AND S.STATUS > 25
)
Run Code Online (Sandbox Code Playgroud)
此查询返回一个值,即符合条件的值(S.Status> 25).
但是,对于其他查询,如果EXISTS子查询中的一行甚至是真的,它似乎返回我正在选择的整个表.
如何控制这个?
子查询(例如 EXISTS)可以是相关的,也可以是不相关的。
在您的示例中,您使用相关子查询,这通常是 EXISTS 的情况。您在 SP 中查找给定 P.PNO 的记录,即对每个 P 记录进行查找。
如果没有,SP.PNO = P.PNO您将拥有一个不相关的子查询。即子查询不再依赖于P记录。对于任何 P 记录,它都会返回相同的结果(状态 > 25 存在或不存在)。大多数情况下,当发生这种情况时,这是错误地完成的(忘记将子查询与相关记录相关联),但有时这是需要的。
| 归档时间: |
|
| 查看次数: |
1480 次 |
| 最近记录: |