Создание нового столбца с использованием результирующего набора из union all - sql - PullRequest
0 голосов
/ 16 мая 2019

У меня ДВА простых ПРОСМОТРА с колонками PID и NAME соответственно.Вот как они связаны друг с другом.

View1:

PID NAME

Comp1, C1

Comp2, C2

View2:

PID NAME ParentPID

Pool1, P1, Comp1

Pool2, P2, Comp2

Я хочу создать представление с нижними столбцами с помощью UNIONВСЕ утверждения (я думаю, это самый простой подход)

PID, NAME, PID: NAME

Comp1, C1, C1

Comp2, C2, C2

Pool1, P1, C1: P1

Pool2, P2, C2: P2

Если я просто использую столбцы PID и NAME, оператор union all будет работать правильно.например:

SELECT comp.PID, comp.NAME

from View1 comp

UNION ALL

SELECT pool.PID, pool.NAME

from View2 pool;

Но происходит сбой при попытке создать новый столбец с помощью UNION ALL, как показано ниже.

SELECT comp.PID, comp.NAME,comp.NAME as Comp_pool_NAME

from View1  comp

UNION ALL

SELECT pool.PID, pool.NAME, concat(comp.NAME||':',pool.NAME) as Comp_pool_NAME

from View2  pool;

1 Ответ

0 голосов
/ 16 мая 2019

Два запроса в UNION ALL не зависят друг от друга.Вы не можете ссылаться на одно внутри другого.Похоже, что вы хотите:

all rows from View1
union all
all rows from View2 with a column from View1

Итак, во втором запросе вам нужно объединить view1 и view2:

select pid, name, pid_name from view1
union all
select v2.pid, v2.name, v1.name || ':' || v2.name
  from view2 v2
 inner join view1 v1 on v1.pid = v2.pid  
...