Что не так с этим форматом - PullRequest
0 голосов
/ 27 августа 2010
SELECT 
....
GROUP BY 
c.city_id

ORDER BY p.name desc
UNION 
SELECT 
...

GROUP BY 
c.city_id, p

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

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

Ответы [ 5 ]

3 голосов
/ 27 августа 2010

ЗАКАЗ ПО приходит в конце

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 голос
/ 27 августа 2010

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

Но ...
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 голос
/ 27 августа 2010

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

1 голос
/ 27 августа 2010

ORDER BY должен быть в конце вашего оператора select, а не перед UNION.

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

0 голосов
/ 27 августа 2010

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

SELECT { unordered_stuff UNION SELECT unordered_stuff } ORDER BY foo

Некоторые, хотя я не все верю, базы данных поддерживают альтернативный синтаксис неоднозначности . Это из списков 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's 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's solution nearby.  Not sure which of these approaches
would be faster; try both.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...