Моя проблема в Oracle, но, вероятно, она не зависит от базы данных (?).
У меня есть следующие таблицы:
аа
vid cb
--- --
1 10
2 15
бб
vid cb
--- --
3 25
4 24
** представитель *
repid vid p
----- --- --
99 1 aa
99 2 aa
99 3 bb
99 4 bb
Столбец p указывает, в какой таблице получить строку.
На самом деле, aa и bb значительно отличаются друг от друга, а p не соответствует имени таблицы, но дает возможность туда добраться Пример - просто упрощение, где у меня есть проблема.
Обратите внимание, что в действительности существует более 2 таблиц aa и bb (их 6).
Я хочу запрос, который возвращает это:
repid vid p cb
----- --- -- --
99 1 aa 10
99 2 aa 15
99 3 bb 25
99 4 bb 24
Следующие работы:
(А) * * тысяча двадцать-один
select rep.vid, rep.p, cb
from (
select 'aa' as p,vid,cb from aa
union all
select 'bb' as p, vid,cb from bb) u,rep
where rep.p=u.p and rep.vid=u.vid
(б)
select rep.vid, rep.p,
decode(rep.p, 'aa', (select cb from aa where vid=rep.vid),
'bb', (select cb from bb where vid=rep.vid)) cb
from rep
Но я бы хотел использовать запрос в представлении, для которого можно использовать предикат.
Итак, вопрос 1: разрешит ли следующее предикат выдвигать.
Вопрос 2: (даже если да для вопроса 1) есть ли способ сделать это без объединения, но с объединениями.
Вопрос 3: Или просто, лучше?
Скрипт для создания данных:
create table bb (vid number(1), cb number(2));
create table aa (vid number(1), cb number(2));
create table rep(rid number(2), vid number(1), p varchar2(2));
insert into rep (rid,vid,p) values (99, 4,'bb');
insert into rep (rid,vid,p) values (99, 3,'bb');
insert into rep (rid,vid,p) values (99, 2,'aa');
insert into rep (rid,vid,p) values (99, 1,'aa');
insert into bb (vid,cb) values (4,24);
insert into bb (vid,cb) values (3,25);
insert into aa (vid,cb) values (2,15);
insert into aa (vid,cb) values (1,10);
commit;