加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 存在/不存在:’select 1’vs’select field’

发布时间:2020-12-12 16:24:15 所属栏目:MsSql教程 来源:网络整理
导读:两者中哪一个表现更好(我最近被指责不小心我的代码,因为我在Oracle中使用了后者): Select * from Tab1Where (not) exists(Select 1 From Tab2 Where Tab1.id = Tab2.id)Select * from Tab1Where (not) exists(Select Field1 From Tab2 Where Tab1.id = Tab2.
两者中哪一个表现更好(我最近被指责不小心我的代码,因为我在Oracle中使用了后者):
Select * 
from Tab1
Where (not) exists(Select 1 From Tab2 Where Tab1.id = Tab2.id)


Select * 
from Tab1
Where (not) exists(Select Field1 From Tab2 Where Tab1.id = Tab2.id)

或者他们俩都一样?

请从SQL Server透视图和Oracle透视图中回答这两个问题.

我用google搜索(主要来自sql-server方面)并发现对此仍有很多争论,尽管我现在的意见/假设是两个RDMBS中的优化者已经足够成熟,可以理解子查询所需要的只是一个布尔值.

解决方法

是的,他们是一样的.存在检查子查询中是否至少有一行.如果是,则评估为true.子查询中的列无论如何都无关紧要.

根据MSDN,存在:

Specifies a subquery to test for the existence of rows.

和Oracle:

An EXISTS condition tests for existence of rows in a subquery.

也许MySQL documentation更能解释:

Traditionally,an EXISTS subquery starts with SELECT *,but it could begin with SELECT 5 or SELECT column1 or anything at all. MySQL ignores the SELECT list in such a subquery,so it makes no difference.

(编辑:李大同)

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

    推荐文章
      热点阅读