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

前端之家收集整理的这篇文章主要介绍了sql – 存在/不存在:’select 1’vs’select field’前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
两者中哪一个表现更好(我最近被指责不小心我的代码,因为我在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.

猜你在找的MsSQL相关文章