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(  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');

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

4

1 回答 1

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 ...

有关如何创建基于视图的更多详细信息,请参阅手册

于 2012-11-18T14:00:33.500 回答