Как я могу заказать записи в ОБЪЕДИНЕНИИ без ORDER BY?

Как уже упоминалось в StepUp, классический способ сделать это - использовать AFTER TRIGGER. Пример решения будет запускаться только с UPDATE. В вашем случае вы также хотели бы добавить триггеры для INSERT и DELETE или адаптировать этот один триггер для обработки этих трех типов событий.

Обратите внимание, что использование триггера может повлиять на @@ ROWCOUNT, поэтому может повлиять на функциональность.

Из-за этого, я думаю, что последние версии SQL Server имеют альтернативные механизмы.

20
задан Patrick Kostjens 4 June 2016 в 10:17
поделиться

7 ответов

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
35
ответ дан 29 November 2019 в 23:00
поделиться

Я не думаю, что порядок гарантируется, по крайней мере, не через весь DBMS.

то, Что я сделал в прошлом для управления упорядочиванием в ОБЪЕДИНЕНИЯХ:

(SELECT a, 0 AS Foo FROM A LIMIT 1)
UNION
(SELECT b, 1 AS Foo FROM B LIMIT 1)
ORDER BY Foo
21
ответ дан 29 November 2019 в 23:00
поделиться

Ваш набор результатов с UNION устранит отличные значения.

я не могу найти доказательство в документации, но от 10 опыт лет я могу сказать, что UNION ALL действительно сохраняет порядок, по крайней мере, в Oracle.

не полагаются на это, однако, если Вы создаете атомную станцию или что-то как этот.

4
ответ дан 29 November 2019 в 23:00
поделиться

Нет, порядком результатов в SQL-запросе управляет только пункт ORDER BY. Может случиться так, что Вы, оказывается, видите заказанный результаты без пункта ORDER BY в некоторой ситуации, но это случайно (например, побочный эффект текущего плана запросов оптимизатора) и не гарантировано.

, Что хитрое заказывает проблеме?

2
ответ дан 29 November 2019 в 23:00
поделиться

Я знаю для Oracle нет никакого способа гарантировать, который выйдет сначала без порядка. Проблема состоит в том при попытке ее, она может выйти в правильном порядке даже в течение большинства времен, Вы выполняете ее. Но как только Вы полагаетесь на него в производстве, это выйдет неправильно.

1
ответ дан 29 November 2019 в 23:00
поделиться

Короткий ответ да, Вы доберетесь тогда B.

-6
ответ дан 29 November 2019 в 23:00
поделиться

Я думал бы не, так как база данных должна будет, скорее всего, сделать ORDER BY чтобы к ОБЪЕДИНЕНИЮ.

ОБЪЕДИНЕНИЕ ВСЕ могли бы вести себя по-другому, но YMMV.

0
ответ дан 29 November 2019 в 23:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: