0

我想从嵌套选择中选择最大 ID。

这是我的查询:

select max(Id) from (SELECT TOP 100 Id FROM [MyTable]) t

选择应返回 100,但它实际上返回MyTable的最大 id 。

PS MyTable包含 100 000 条记录,因此查询返回 100 000。

这是一个例子:

返回 100(没关系)

SELECT TOP 100 Id FROM [MyTable]

返回 100 000,但我想选择“SELECT TOP 100 Id FROM [MyTable]”的最大 id

select max(Id) from (SELECT TOP 100 Id FROM [MyTable]) t

返回 100 000,但我想选择“SELECT TOP 100 Id FROM [MyTable] where Id > 100”的最大 id

select max(Id) from (SELECT TOP 100 Id FROM [MyTable] where Id > 100) t
4

2 回答 2

1

TOP带但不带的查询ORDER BY,例如您的:

SELECT TOP 100 
    Id 
FROM tableX ;

不返回一致的结果。上面的意思是“给我看 100 个 ID,我不在乎,表中有数百万个 ID”。在您运行查询时,DBMS 可以自由地返回它选择的任何 100。它甚至可以选择在前 2 年寄回同样的 100 个,然后突然改变主意并退回另外 100 个。

事实上,这就是你所看到的,当它用于子查询时,优化器将查询“给我任何 100 个 ID 的最大值”转换为“给我表的所有 ID 的最大值”


将该查询更改为(您可以使用任何ORDER BY选择):

SELECT TOP 100 
    Id 
FROM tableX 
  ORDER BY Id ;

单独使用它并用作子查询,您将拥有一致的行为。

于 2012-10-18T12:27:51.483 回答
1

I think nested query just return top 100 rows and id 100000 is one of them. Try this

select max(Id) from (SELECT TOP 100 Id FROM [MyTable] order by Id asc) t
于 2012-10-18T12:12:56.487 回答