2012-11-18 28 views
0

我需要使用视图从传输数据库中找到旅行腿详细信息。使用视图提取数据

我怎么都无法做到这一点。我需要查询所有行程不超过2个行程的行程,即带有1个或2个行程的行程,并显示行程编号(TripNo),行程原点(Start),第一个目的地(Stop1)和第二个行程目的地(Stop2)采用以下格式。

TripNo START STOP1 STOP2 
- - - - - - - - - - - - - - - - 
05 CatmanSt Chinatwon MayflowerSt 
03 MayflowerSt Auckland 

这是下表。

TRIP(TripNo,LicenseCardNo,CarReg,TRIP_DATE,) 
PRIMARY KEY (TripNo), 
FOREIGN KEY (LicenseCardNo) REFERENCES DRIVER(LicenseCardNo), 
FOREIGN KEY (CarReg) REFERENCES TRUCK(CarReg) 

(1, DR1, 'SJG123', ADD_MONTHS(TRUNC(SYSDATE),0)-135) 
(2, DR2, 'GBC222', ADD_MONTHS(TRUNC(SYSDATE),0)-135) 
(3, DR1, 'GBC270', ADD_MONTHS(TRUNC(SYSDATE),0)-133) 
(4, DR3, 'SJG123', ADD_MONTHS(TRUNC(SYSDATE),0)-130) 
(5, DR22, 'SJG123', ADD_MONTHS(TRUNC(SYSDATE),0)-130) 
(6, DR22, 'GBC222', ADD_MONTHS(TRUNC(SYSDATE),0)-124) 

TRIPLEG表

TRIPLEG( TripNo, LEGNo, DEPARTURE, DSTINATION)  
CONSTRAINT TRIPLEG_PKEY PRIMARY KEY (TripNo, LEGNo), 
CONSTRAINT TRIPLEG_UNIQUE UNIQUE(TripNo, DEPARTURE, DESTINATION), 
CONSTRAINT TRIPLEG_FKEY1 FOREIGN KEY (TripNo) REFERENCES TRKTRIP(TripNo)); 

INSERT INTO TRIPLEG VALUES(1, 1, 'Armidale', 'Liverpool'); 
INSERT INTO TRIPLEG VALUES(1, 2, 'Liverpool', 'Adelaide'); 
INSERT INTO TRIPLEG VALUES(1, 3, 'Adelaide', 'Armidale'); 
INSERT INTO TRIPLEG VALUES(3, 1, 'MayflowerSt', 'Auckland'); 
.... 
INSERT INTO TRIPLEG VALUES(5, 1, 'CatmanSt', 'Chinatwon'); 
INSERT INTO TRIPLEG VALUES(5, 2, 'Chinatwon', 'MayflowerSt'); 

我需要使用视图来实现。怎么做 ?我无法检索它。我应该使用左连接或右连接

+0

最后一个记录应该是INSERT INTO TRIPLEG VALUES(5,21,'Chinatwon','MayflowerSt');'? –

+0

我正在使用orcale 11g –

+0

@KiroConeski它应该是2.我编辑了它 –

回答

0

这应做到:

select st.tripno, 
     st.departure as "START", 
     st.dstination as stop1, 
     stp1.dstination as stop2 
from tripleg st 
    left join tripleg stp1 
     on stp1.tripno = st.tripno 
     and stp1.departure = st.dstination 
where st.legno = 1 
    and st.tripno in (select tripno 
        from tripleg 
        group by tripno 
        having count(*) < 3); 

这里是一个SQLFiddle演示:http://sqlfiddle.com/#!4/7f773/1

如果你需要创建一个视图出来的是,只需运行:

create or replace view v_short_trips 
as 
select ... 

有关如何创建基于浏览更多内容,请refer to the manual

+0

它说错误。在第4行丢失 –

+0

好的,我放弃了:) @a_horse_with_no_name,不应该在左连接之前移动以''where st.legno = 1 ...'开头的查询的最后部分? –

+0

@KiroConeski:no。由于左连接*每条*腿将被退回,我只需要第一个。如果这是进入连接状态,则只考虑第一条腿。 –