我想从嵌套选择中选择最大ID。
这是我的疑问:
select max(Id) from (SELECT TOP 100 Id FROM [MyTable]) t
此选择应返回100,但它实际上返回 MyTable 的最大ID。
P.S。 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]的最大ID,其中Id> 100”
select max(Id) from (SELECT TOP 100 Id FROM [MyTable] where Id > 100) t
答案 0 :(得分:1)
我认为嵌套查询只返回前100行,而id 100000就是其中之一。试试这个
select max(Id) from (SELECT TOP 100 Id FROM [MyTable] order by Id asc) t
答案 1 :(得分:1)
TOP
但没有ORDER BY
的查询,与您的一样:
SELECT TOP 100
Id
FROM tableX ;
不会返回一致的结果。上面的意思是“告诉我100个ID,我不关心哪个,表中有数百万个”。无论何时运行查询,DBMS都可以自由返回它选择的任何100。它甚至可以选择在前两年送回相同的100,然后突然改变主意并返回其他100个。
事实上,这就是你所看到的,当使用子查询时,优化器会将查询“给我最多100个ID”转换为 “给我表“
的所有ID的最大值将该查询更改为(您可以使用您选择的任何ORDER BY
):
SELECT TOP 100
Id
FROM tableX
ORDER BY Id ;
单独使用并将其用作子查询,您将具有一致的行为。