31

我对sql有一个普遍的疑问。“Top 1 1”究竟会做什么?以下查询的含义是什么?

select top 1 1 from Worker W where not exists (select 1 from Manager M where M.Id = W.Id)

在 sql server 查询中选择“TOP 1 1”和“SELECT 1”有什么区别?

4

5 回答 5

48

SELECT TOP 1意味着选择结果集中的第一条记录

SELECT 1表示返回 1 作为结果集

SELECT TOP 1 1 FROM [SomeTable] WHERE <SomeCondition>表示如果条件为真并且从选择返回任何行,则仅返回顶1行并且仅返回1该行的整数(没有数据,仅返回整数 1)。

于 2013-10-14T11:57:20.360 回答
15

在下文中,作为“TOP 1”一部分的第一个“1”表示在获得单个结果后停止。第二个“1”只是因为作者真的不在乎结果是什么。

SELECT TOP 1 1 FROM WORKER

本质上是一样的

SELECT TOP 1 * FROM WORKER

唯一的问题是它在查询的“EXISTS”部分是否比仅仅更有效

SELECT 1 FROM Manager...
于 2015-03-18T23:54:16.137 回答
4

该请求确定是否有至少一名工人(前 1 名)没有经理。SELECT 1 子句充当“返回真”。

如果有管理器,则请求select 1 from Manager M where M.Id = W.Id返回 1。如果没有管理器,则请求返回 NULL。

于 2013-10-14T11:58:34.410 回答
1

SELECT TOP 1 1将精确选择 0 或 1 1秒。 SELECT 11精确选择 N 行,其中 N 是符合您的条件的行数。

在您的情况下,它正在寻找第一个( TOP 1) 没有经理的工人。但是,既然它是SELECT TOP 1 1,它所做的就是寻找一个没有经理的工人的存在。

于 2013-10-14T11:58:44.963 回答
1

它的工作方式类似于 true false ... 例如,从 ItemId=4526000 的 Items 中选择 top 1 1 它将返回 1,因为 where 条件匹配。如果它不匹配 then ,则不会返回任何内容。=> 假设从 ItemId=4526000 的 Items 中选择 top 10 1 如果 ItemId 重复 5 次,它将返回 1 5 次。

于 2016-09-14T07:10:04.973 回答