Информация об изменениях

Сообщение Re: объясните логику? [MSSQL] от 10.06.2019 17:12

Изменено 10.06.2019 17:14 Джеффри

Re: объясните логику? [MSSQL]
Здравствуйте, Kaifa, Вы писали:

K>выдаст ошибку? какая ему разница?


Во втором случае ORDER BY не нужен, т.к. не влияет на результат запроса никаким образом, в отлчии от примера с ТОП. Но при обработке такой конструкции у engine-а будет такой выбор — проигнорировать ее (мне кажется, что так происходит в некоторых СУБД), тупо исполнить (что бессмысленно), выдать ошибку (как происходит в T-SQL).

Рискну предположить, что Майкрософт выбрала последний вариант для большей надежности, чтобы разработчики не оставляли ненужные строки (которые все равно не будут выполняться) и чтобы не было случайных ошибок (когда ORDER BY по ошибке прописали внутри подзапроса).
Re: объясните логику? [MSSQL]
Здравствуйте, Kaifa, Вы писали:

K>выдаст ошибку? какая ему разница?


Во втором случае ORDER BY не нужен, т.к. не влияет на результат запроса никаким образом, в отличии от примера с ТОП. Но при обработке такой конструкции у engine-а будет такой выбор — проигнорировать ее (мне кажется, что так происходит в некоторых СУБД), тупо исполнить (что бессмысленно), выдать ошибку (как происходит в T-SQL).

Рискну предположить, что Майкрософт выбрала последний вариант для большей надежности, чтобы разработчики не оставляли ненужные строки (которые все равно не будут выполняться) и чтобы не было случайных ошибок (когда ORDER BY по ошибке прописали внутри подзапроса).

Кто-нибудь ведь напишет:

select top 1 * from (
    select val 
    from #t
    order by val
) s


А потом будет жаловаться, что случайная строка возвращается...