两者中哪一个表现更好(我最近被指责不小心我的代码,因为我在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.