В документации здесь говорится:
Соответствующие выражения в списках выбора компонента
запросы составного запроса должны совпадать по числу и должны быть в
та же группа типов данных (например, числовой или символьный).
Это означает, что вы не можете обойтись без указания списка проекций только один раз, так как это требование для оператора UNION
.
Однако есть некоторые вещи, которые вы можете сделать для части выбора. Если к query1 и query2 присоединены общие таблицы / представления (внешние), то вы можете получить их из UNION
, отделив эту часть и присоединив к ней общие таблицы / представления, рассматривая часть UNION
как отдельный VIEW
.
Если бы вы предоставили упрощенный пример ваших запросов, это было бы лучше, но вот пример, который я придумал:
Учитывая этот запрос (предположительно похожий на ваш):
SELECT t0.col1, t2.col2 FROM table0 t0, table2 t2 WHERE t0.col = t2.col(+)
UNION
SELECT t1.col1, t2.col2 FROM table1 t1, table2 t2 WHERE t1.col = t2.col(+);
Вы можете заменить его на:
SELECT q1.col1, t2.col2 FROM
(
select t0.col1, t0.col FROM table0 t0
UNION
select t1.col1, t1.col FROM table0 t1
) q1,
table2 t2
WHERE q1.col = t2.col(+);
Приветствия