UNION после ЗАКАЗА И ПРЕДЕЛЫ
Моя цель - выполнить два разных запроса, а затем объединить их.
Мой код:
SELECT * FROM some tables WHERE ... ORDER BY field1 LIMIT 0,1
UNION
SELECT * FROM some tables WHERE ...
Я получаю следующую ошибку:
# 1221 - Неправильное использование UNION и ORDER BY
Важно, чтобы ORDER BY был только для первого запроса. Как выполнить эту задачу?
Ответы
Ответ 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