【发布时间】:2014-07-18 09:46:33
【问题描述】:
我是一个初学者,我完全了解NOT IN 所做的事情,但并没有真正了解EXISTS 或NOT EXISTS。
更何况,我不明白这是做什么的:
SELECT TOP 1 1
FROM tblSomeTable
这个查询实际上做了什么?
作为参考,我一直在使用这样的东西:
SELECT COUNT(E_ID)
FROM tblEmployee e
INNER JOIN tblManager m
ON e.tbl_ID = m.tbl_ID
WHERE NOT EXISTS(SELECT TOP 1 1
FROM tblEmployee e2
WHERE e2.E_ID = e.E_ID
AND isFired = 'N'
)
我想我还没有阅读/看过外行的解释,这对我来说是有意义的。即使看了Diff between Top 1 1 and Select 1 in SQL Select Query我还是不明白
【问题讨论】:
-
一个建议,当使用
EXISTSNOT EXISTS时,没有必要在那里使用SELECT TOP 1。一个简单的SELECT *将使用聚集索引并且足够快。还有一件事,你也可以检查EXISTS (SELECT 1/0 FROM A),你会看到1/0实际上没有被执行。所以,在EXISTS中使用TOP真的没有必要。 -
@zhongxiao37:我想你写的就是这个问题的实际问题。考虑将您的解释转换为答案(不过,您可能还想扩展“EXISTS 中不必要的顶部”位)。
标签: sql sql-server exists not-exists