加入收藏 | 设为首页 | 会员中心 | 我要投稿 阜阳站长网 (https://www.0558zz.com/)- 科技、建站、内容创作、云计算、网络安全!
当前位置: 首页 > 数据库 > MsSql > 正文

sql – EXISTS如何返回除所有行或没有行以外的东西?

发布时间:2021-03-30 14:08:52 所属栏目:MsSql 来源:互联网
导读:我是一个开始SQL程序员 – 我得到了大多数东西,但不是EXISTS. 它在我看来,并通过文档查看整个EXISTS语句返回一个布尔值. 但是,我看到了可以使用它的具体示例,并返回表的一部分,而不是全部或不返回. SELECT DISTINCT PNAMEFROM P WHERE EXISTS( SELECT * FROM

我是一个开始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
)

此查询返回一个值,即满足条件的值(S.Status> 25).

但是,对于其他查询,如果EXISTS子查询中的一行甚至是真的,它似乎返回我正在选择的整个表.

如何控制这个?

解决方法

诸如EXISTS的子查询可以是相关的,也可以是非相关的.

在您的示例中,您使用相关子查询,这通常是EXISTS的情况.您在SP中查找给定P.PNO的记录,即您对每个P记录进行查找.

如果没有SP.PNO = P.PNO,您将拥有一个不相关的子查询.即子查询不再依赖于P记录.它会为任何P记录返回相同的结果(状态> 25根本不存在).大多数情况下,当发生这种情况时,这是错误地完成的(一个忘记将子查询与所讨论的记录联系起来),但有时也是如此.

(编辑:阜阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读