从不同列中的多个表中获取值

时间:2016-01-14 13:08:02

标签: sql plsql oracle11g

我需要从多个表中获取数据,但这里有一些场景是重新创建问题的测试脚本

create table sub_test (sub_id number);

create table sub_svc_test (sub_id number, sub_svc_id number);

create table sub_svc_parm_test (sub_svc_id number, parm_id number, val varchar2(20) );

insert into sub_test values (100);
insert into sub_test values (101);
insert into sub_test values (102);

insert into sub_svc_test values (100,1001);
insert into sub_svc_test values (100,1002);
insert into sub_svc_test values (101,1005);
insert into sub_svc_test values (101,1006);
insert into sub_svc_test values (101,1007);
insert into sub_svc_test values (102,1009);
insert into sub_svc_test values (102,1010);

insert into sub_svc_parm_test values (1001, 51, 'test_id');
insert into sub_svc_parm_test values (1001, 53, 'no');
insert into sub_svc_parm_test values (1002, 54, 'max');
insert into sub_svc_parm_test values (1005, 51, 'test_id');
insert into sub_svc_parm_test values (1007, 51, 'test_id');
insert into sub_svc_parm_test values (1007, 54, 'min');

我需要从sub_svc_parm_test表中获取特定parm_id的VAL列的值,以便

select * from sub_svc_test ss, sub_svc_parm_test ssp
where ss.sub_svc_id = ssp.sub_svc_id and parm_id = 51;

此查询将为我提供51 parm_id的VAL现在我需要创建一个视图,它将显示parm_id 51,54的VAL,但是在不同的列中,如

select ssp.val, ssp1.val
from sub_svc_test ss, sub_svc_parm_test ssp, sub_svc_test ss1,
     sub_svc_parm_test ssp1
where ss.sub_svc_id = ssp.sub_svc_id
  and ssp.parm_id = 51
  and ssp1.parm_id  = 54
  and ss1.sub_svc_id = ssp1.sub_svc_id;

这个查询会给我输出,但它也执行交叉连接,因为我没有加入sub_svc_test ss和sub_svc_test ss1所以它给了我6行2 * 3 但要求是它应该向我显示任何列的MAX行,在我们的例子中它是第一列(3行),剩下的没有数据的行可以包含任何字符串或只是在其中为null

VAL             VAL_1
--------------     -------------             
test_id         max
test_id         min
test_id         null
我正在使用---- Oracle Database 11g企业版11.2.0.3.0版 - 64位生产

请询问任何澄清

由于

1 个答案:

答案 0 :(得分:0)

所以你实际上想要执行两个单独的选择并将它们显示在彼此旁边。

也许这样的事情可行:

select val, val1 from (
  (select rownum as r, val as val from sub_svc_parm_test ssp1 where parm_id = 51) 
  full outer join 
  (select rownum as r1, val as val1 from sub_svc_parm_test ssp2 where parm_id = 54)
  on r = r1
)