0

ネストされた選択から最大IDを選択したい。

これが私の質問です:

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

この選択は100を返すはずですが、実際にはMyTableの最大IDを返します。

PSMyTableには100000レコードが含まれているため、クエリは100000を返します。

次に例を示します。

100を返します(大丈夫です)

SELECT TOP 100 Id FROM [MyTable]

100 000を返しますが、「SELECT TOP 100 IdFROM[MyTable]」の最大IDを選択したい

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

100 000を返しますが、「SELECT TOP 100 Id FROM [MyTable] whereId>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

ネストされたクエリは上位100行を返すだけで、ID100000はその1つだと思います。これを試して

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