我的問題是在Oracle上,但可能與數據庫無關(?)。通過加入避免結合?
我有以下表格:
AA
vid cb
--- --
1 10
2 15
BB
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
(B)
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;
你對模式有控制嗎?我認爲你不能改變任何表格? – Burt 2009-12-15 23:52:00
正確:表已存在,我無法更改它們。 – 2009-12-16 09:48:42