Как переписать этот запрос, чтобы не использовать предложение union - PullRequest
4 голосов
/ 16 сентября 2010

Как переписать этот запрос НЕ использовать предложение UNION (UNION ALL):

SELECT
  c
FROM a
UNION
SELECT
 c
FROM b

ожидаемый результат (набор записей должен быть таким же):

SELECT
  c
FROM ....

1 Ответ

7 голосов
/ 16 сентября 2010

Чтобы получить те же результаты, что и ваш запрос выше, вы можете сделать это:

SELECT COALESCE(a.c, b.c) AS c
FROM a
FULL OUTER JOIN b
    ON b.c = a.c

Однако это даст вам те же результаты, что и UNION, который не совсем совпадает с UNION ALL (поскольку дубликаты будут удалены). Чтобы выполнить UNION all, вам нужно сделать то же самое, но при условии сбоя условия соединения:

SELECT COALESCE(a.c, b.c) AS c
FROM a
FULL OUTER JOIN b
    ON 1 = 0

В любом случае, я не уверен, что это будет намного быстрее, чем сделать это с помощью UNION.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...