Подтвердить что ты не робот

UNION после ЗАКАЗА И ПРЕДЕЛЫ

Моя цель - выполнить два разных запроса, а затем объединить их.
Мой код:

SELECT * FROM some tables WHERE ... ORDER BY field1 LIMIT 0,1 
UNION   
SELECT * FROM some tables WHERE ...

Я получаю следующую ошибку:

# 1221 - Неправильное использование UNION и ORDER BY

Важно, чтобы ORDER BY был только для первого запроса. Как выполнить эту задачу?

4b9b3361

Ответ 1

Вы можете использовать скобки, чтобы разрешить использование ORDER/LIMIT для отдельных запросов:

(SELECT * FROM some tables WHERE ... ORDER BY field1 LIMIT 0, 1)
UNION   
(SELECT * FROM some tables WHERE ...)
ORDER BY 1   /* optional -- applies to the UNIONed result */
LIMIT 0, 100 /* optional -- applies to the UNIONed result */

Ответ 2

SELECT * FROM (SELECT * FROM some tables WHERE ... ORDER BY field1 LIMIT 0,1) x
UNION ALL
SELECT * FROM some tables WHERE ...

Обратите внимание на использование UNION ALL:

  • UNION удаляет повторяющиеся строки из набора результатов, и БД заказывает все строки перед этим (поэтому весь набор результатов сортируется)
  • UNION ALL сохраняет как порядок, так и дубликаты

Ответ 3

просто поместите все в круглые скобки:

(SELECT * FROM table1 ORDER BY datetime  )
UNION   
(SELECT * FROM table2 ORDER BY datetime DESC)

Ответ 4

(SELECT user_id AS id FROM tbl_user)
UNION
(SELECT address_id AS id FROM tbl_address)
ORDER BY id ASC LIMIT 10