Присоединяйтесь, если не существует - PullRequest
0 голосов
/ 13 февраля 2019

Я столкнулся со следующей проблемой:

У меня длинный запрос (назовем его запрос «Z»), который включает в себя множество объединений и подзапросов.Он выводит два столбца:

  • A: элемент
  • B: целочисленный атрибут, диапазон гарантированно равен 1-10

Я хочу присоединиться из таблицыЭлементы X (столбец A), которые не представлены как выходные данные запроса Z и дают им произвольное значение атрибута 10 (столбец B).

Я попытался создать подзапрос с внутренним подзапросом, но uisng не существует, но для этого требуется скопировать мой оригиналзапрос внутри и занимает много времени (мне даже не удалось его выполнить).

Есть предложения?Спасибо

Ответы [ 3 ]

0 голосов
/ 13 февраля 2019

Это не совсем понятно из вашего вопроса, но я думаю, что вы имеете в виду таблицу X - расширенный набор записей из запроса Z.Если это так, простое внешнее объединение должно дать вам желаемый результат:

select coalesce(z.a, x.a) as a
       , coalesce(z.b, 10) as b
from x
     left outer join ( your query ) z
     on z.a = x.a

Если X не является надмножеством Z, тогда вы должны попробовать вместо этого FULL OUTER JOIN.


Я предположил, что столбец A работает как UID для запроса Z и таблицы X.Если это не так, вам нужно изменить приведенное выше утверждение или отредактировать свой вопрос, чтобы включить больше деталей.

0 голосов
/ 13 февраля 2019

Я сделал это аналогично тому, что написал @Ancaron.

SELECT A, B FROM Z
UNION ALL
SELECT A, '10' FROM X
WHERE NOT EXISTS 
(
select Z.A
from Z
WHERE Z.A=X.A
)
0 голосов
/ 13 февраля 2019

Согласно вашим комментариям, одна возможность - сначала сделать union результатов вашего запроса "Z", а затем еще один select с добавлением только выбора MIN() вашего столбца B. Так чтобудет выглядеть что-то вроде:

SELECT A , MIN(B) FROM
(
  (QUERY Z) AS Z 
  union
  (SELECT ITEM as A, 10 as B FROM X)
)
GROUP BY A
...