我是一名初学者,我完全了解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后我仍然没有得到它
答案 0 :(得分:1)
我认为实际上需要回答的问题是EXISTS (SELECT TOP 1 1 FROM MyTable)
是否真的有必要。
Top 1 1
告诉查询为任何答案选择常量“1”。
Top 1
部分告诉它在找到匹配后立即停止并返回“1”。
EXISTS (SELECT TOP 1 FROM MyTable)
不足够吗?
答案 1 :(得分:0)
您的第一个查询将只获得结果集中总行数中的最高记录(非常第一条记录)。因此,如果您的查询返回10行..您将获得第一行。详细了解TOP
SELECT TOP 1 FROM tblSomeTable
在第二个查询中,()
下的部分是一个子查询,在您的情况下,它是一个相关子查询,对于外部查询处理的每一行,它将被评估一次。
NOT EXISTS
实际上会检查子查询中存在的行是否存在
WHERE NOT EXISTS
(
SELECT TOP 1 1 FROM tblEmployee e2 WHERE e2.E_ID = e.E_ID AND isFired = 'N'
)
答案 2 :(得分:0)
SELECT TOP 1 1 FROM <table>
将返回第一行,其值始终为1,您已将其定义为常量。
因此,如果将其更改为SELECT TOP 1 2 FROM <table>
,则会始终将值返回为2。
SQL中IN
和EXISTS
运算符之间的区别
请阅读:
http://awesomesql.wordpress.com/2009/07/31/difference-between-in-and-exists-operators-in-sql/