SQL - Вам нужно повторить ORDER BY во внешнем запросе?
У меня есть запрос:
select t1.*
from t1
order by t1.date
Этот запрос заключен в другом запросе:
select * from (select t1.*
from t1
order by t1.date) t2
Вы должны повторить ORDER BY
во внешнем запросе? Как это:
select * from (select t1.*
from t1
order by t1.date) t2 order by t2.date
Меняется ли ответ, если внутренний запрос перемещается в CTE?
4 ответа
Да, вы должны повторить order by во внешнем запросе, если вы хотите, чтобы выходные данные были упорядочены.
SQLserver соблюдает порядок в только во внешнем запросе, а ваш внутренний порядок не имеет смысла
В SQL Server вы получите ошибку при попытке использовать order by
без top
, offset
, или же for xml
если это не в самом внешнем запросе.
Предложение ORDER BY недопустимо в представлениях, встроенных функциях, производных таблицах, подзапросах и общих табличных выражениях, если также не указаны TOP, OFFSET или FOR XML.
Вы можете семантически обойти эту ошибку, используя select top 100 percent
, но order by
не будет строго соблюдаться, когда этот оператор вызывается внутри другого оператора.
Внешний запрос может изменить порядок результатов, предоставленных внутренним запросом. Следовательно, вам также понадобится заказ по внешнему запросу. Однако в соответствии с примером запроса, предоставленного вами с использованием заказа по внутреннему запросу, нет необходимости.
Вам не нужно повторять заказ в обоих запросах. Вы должны использовать Order By
во внешнем запросе. Как следующее:
Select * From (Select t1.* From t1) t2
Order By t2.date