Sql внутренняя проблема вопроса - PullRequest
2 голосов
/ 09 ноября 2011

У меня есть таблица tbl_test:

create table tbl_test (
    tabid int identity
)

со значениями:

 Insert into tbl_test values 1 union 2 union 3 .... union 1000

Запрос:

select MAX(b.tabid) from
(  
    select top 100 * from tbl_test
) as b  

Я ожидаю, что этот запрос вернет 100, но вместо этого он вернет 1000.

Ответы [ 2 ]

8 голосов
/ 09 ноября 2011
select top 100 * from tbl_test 

Для внутреннего оператора нет явного порядка, поэтому нет гарантии, в каком порядке будут читаться строки.Если вы заказываете его по tabid ASC, вы должны увидеть ожидаемое 100.

2 голосов
/ 09 ноября 2011

Вы не включаете предложение order by в свой подзапрос (что разрешено в сочетании с TOP), поэтому нет никаких сведений о том, какие записи будут возвращены.Очевидно, что 1000 включается в данные, возвращаемые из подзапроса, что означает, что они будут возвращены MAX.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...