На данный вопрос уже ответили:
У меня есть запрос:
SELECT '%' AS id_terminal
UNION
(SELECT DISTINCT
tr.id_terminal AS id_terminal
FROM...
ORDER BY tr.id_terminal ASC);
При этом подзапрос из второй части UNION:
SELECT DISTINCT
tr.id_terminal AS id_terminal
FROM...
ORDER BY tr.id_terminal ASC
возвращает упорядоченные данные, а общий запрос с UNION
возвращает '%'
и данные из результата этого запроса, но уже неупорядоченные. А почему UNION
меняет порядок строк результата? Для UNION
оптимизатор проводит свою сортировку? И можно ли в этом случае отменить использование этой оптимизации?
Согласно документации, для того, чтобы получить сортировку объединённого набора (и/или ограничение по количеству), необходимо все подзапросы обрамить скобками, а сортировку указать за пределами скобок.
(
SELECT '%' AS id_terminal
)
UNION ALL
(
SELECT DISTINCT tr.id_terminal AS id_terminal
FROM ...
)
ORDER BY id_terminal='%' DESC, id_terminal ASC;
При объединении наборов записей любой UNION (тем более UNION DISTINCT) имеет полное право начхать на сортировку в подзапросах ради эффективности выполнения операции объединения.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
необходимо реализовать статический публичный класс с аналогичным элементом List в вижл с++ вот код шарпа http://prntscrcom/jd7zk7, хелп
Написал небольшую функцию для чтение памяти процесса, но при её срабатывании, программа над которой проводятся опыты вылетаетЧто я делаю...