Как я могу заказать записи в ПРОФСОЮЗЕ без ORDER BY?
-
03-07-2019 - |
Вопрос
Как я могу быть уверен, что мой результирующий набор будет иметь a
первый и b
второй?Это помогло бы мне решить сложную проблему с заказом.
Вот упрощенный пример того, что я делаю:
SELECT a FROM A LIMIT 1
UNION
SELECT b FROM B LIMIT 1;
Решение
SELECT col
FROM
(
SELECT a col, 0 ordinal FROM A LIMIT 1
UNION ALL
SELECT b, 1 FROM B LIMIT 1
) t
ORDER BY ordinal
Другие советы
Я не думаю, что порядок гарантирован, по крайней мере, не во всех СУБД. Р>
В прошлом я управлял порядком в UNIONs:
(SELECT a, 0 AS Foo FROM A LIMIT 1)
UNION
(SELECT b, 1 AS Foo FROM B LIMIT 1)
ORDER BY Foo
Ваш результирующий набор с помощью UNION
устранит различные значения.
Я не могу найти никаких доказательств в документации, но из 10
по многолетнему опыту я могу сказать, что UNION ALL
сохраняет порядок, по крайней мере, в Oracle
.
Однако не полагайтесь на это, если вы строите атомную станцию или что-то в этом роде.
Нет, порядок результатов в запросе SQL контролируется только предложением ORDER BY. Может случиться так, что в некоторых ситуациях вы видите упорядоченные результаты без предложения ORDER BY, но это случайно (например, побочный эффект текущего плана запросов оптимизатора) и не гарантируется.
В чем проблема сложного заказа?
Я знаю, что для Oracle нет способа гарантировать, что он выйдет первым без заказа. Проблема в том, что если вы попробуете это, оно может получиться в правильном порядке даже в большинстве случаев, когда вы его запускаете. Но как только вы положитесь на нее в процессе производства, она выйдет из строя. Р>
Я бы подумал, что нет, поскольку базе данных, скорее всего, нужно будет выполнить ORDER BY для UNION.
UNION ALL может вести себя по-разному, но YMMV.
Короткий ответ: да, вы получите A, а затем B.