Что не так с этим форматом

0
SELECT 
....
GROUP BY 
c.city_id

ORDER BY p.name desc
UNION 
SELECT 
...

GROUP BY 
c.city_id, p

ОШИБКА 1221 (HY000): неправильное использование UNION и ORDER BY

есть способ иметь этот формат, потому что я хочу, чтобы верхний запрос имел orderby, мне нужно иметь тот же порядок в нижнем запросе

Теги:

5 ответов

3
Лучший ответ

ПОРЯДОК Входит в конец

select *
from..
union all
select * 
from...
order by....

что вы можете сделать, если хотите, чтобы первый запрос отображался первым, это

select *, 1 as SortOrder
from..
union all
select * ,2 as SortOrder
from...
order by SortOrder,<other columns>...
1

В стандартном SQL, ORDER BY приходит в конце запросов UNION'd и применяется к окончательному результату из этих запросов.

Но...
MySQL позволяет использовать ORDER BY в операторе UNION, если заключить его в скобки:

(  SELECT ....
    FROM ...
GROUP BY c.city_id
ORDER BY p.name DESC )
UNION 
  SELECT ...
    FROM ...
GROUP BY c.city_id

... который также позволит вам использовать LIMIT...

1

Вы не можете использовать порядок по выбранным запросам, которые будут объединены UNION. Вы можете, если хотите, выбрать все после этого и добавить к нему заказ.

  • 0
    не вступил в союз, слившись
1

ORDER BY должен находиться в конце вашего оператора select, а не перед UNION.

Смотрите здесь и здесь для получения дополнительной информации в синтаксисе UNION.

0

Как говорят другие ответы, он анализируется как

SELECT { unordered_stuff UNION SELECT unordered_stuff } ORDER BY foo

Некоторые, хотя я не верю всем, базы данных поддерживают альтернативный синтаксис disambigiouation. Это из списков Pg.

(SELECT * from foo where priority = 1 order by seniority)
UNION ALL
(select * from foo where priority > 1 order by seniority, priority)

Otherwise the ORDER BY is considered to apply to the whole UNION result
(it effectively got lower binding priority than the UNION).  Note also
that you *must* use UNION ALL, else UNION will attempt to eliminate
duplicates, and mess up the sort order while at it.

See also Bruno solution nearby.  Not sure which of these approaches
would be faster; try both.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню