Oracle8i 数据库,SQL语句如下:SELECT distinct L.FLT_NR "航班号",
S.SCH_DEP_DT + 1 / 3 "起飞时间(北京时)",
S.DEP_ARP_CD "起飞站",
S.ARV_ARP_CD "落地站",
S.LATEST_TAIL_NR "机尾号",
C.FCAP "外籍机组"
FROM (SELECT '3067' FLT_NR
FROM DUAL
UNION
SELECT '0321'
FROM DUAL
UNION
SELECT '0325'
FROM DUAL
UNION
SELECT '0327'
FROM DUAL
UNION
SELECT '0345'
FROM DUAL
UNION
SELECT '0455'
FROM DUAL
UNION
SELECT '0467'
FROM DUAL
UNION
SELECT '0383'
FROM DUAL
UNION
SELECT '0359'
FROM DUAL
UNION
SELECT '0301'
FROM DUAL
UNION
SELECT '0302' FROM DUAL) L,
(SELECT *
FROM SCH_DOPS_SOFL S
WHERE S.SCH_DEP_DT BETWEEN SYSDATE - 1 / 3 AND
TRUNC(SYSDATE) - 1 / 3 + 1 + 11 / 24) S,
(select s.flt_dt, a.flt_nr, s.flt_nr as back_flt_nr, s.latest_tail_nr
from Sch_dops_sofl s,
(select s.flt_nr,
s.latest_tail_nr,
s.sch_dep_dt,
s.sch_arv_dt,
s.dep_arp_cd,
s.arv_arp_cd
from Sch_dops_sofl s,
(SELECT '3067' FLT_NR
FROM DUAL
UNION
SELECT '0321'
FROM DUAL
UNION
SELECT '0325'
FROM DUAL
UNION
SELECT '0327'
FROM DUAL
UNION
SELECT '0345'
FROM DUAL
UNION
SELECT '0455'
FROM DUAL
UNION
SELECT '0467'
FROM DUAL
UNION
SELECT '0383'
FROM DUAL
UNION
SELECT '0359'
FROM DUAL
UNION
SELECT '0301'
FROM DUAL
UNION
SELECT '0302' FROM DUAL) M
where M.FLT_NR = s.flt_nr(+)
and s.flt_dt BETWEEN SYSDATE - 1 / 3 AND
TRUNC(SYSDATE) - 1 / 3 + 1 + 11 / 24) a
where s.latest_tail_nr = a.latest_tail_nr
and s.dep_arp_cd = a.arv_arp_cd
and s.sch_dep_dt between a.sch_arv_dt and a.sch_arv_dt + 12 / 24) F,
(SELECT DISTINCT S.Flt_Nr, S.LATEST_TAIL_NR, 'Y' AS FCAP
FROM ROSTER_V R, DUTY_PRD_SEG_V D, SCH_DOPS_SOFL S, CREW_V C
WHERE R.SERIES_NUM = D.SERIES_NUM
AND R.SCHED_NM = D.SCHED_NM
AND R.STAFF_NUM = C.STAFF_NUM
AND S.CREW_DEP_DT = D.RESCHEDULED_FLT_DT_TM - 1 / 3
AND TRIM(S.FLT_NR || S.OP_SUFFIX) = D.FLT_NUM
AND S.LATEST_DEP_ARP_CD = D.ACT_PORT_A
AND S.LATEST_ARV_ARP_CD = D.ACT_PORT_B
AND D.RESCHEDULED_FLT_DT_TM BETWEEN SYSDATE AND
TRUNC(SYSDATE) + 1 + 11 / 24
AND D.DELETE_IND = 'N'
AND D.DUTY_CD = 'FLY'
AND D.FD_IND = 'Y'
AND C.NATIONALITY_CD <> 'CN') C
WHERE L.FLT_NR = S.FLT_NR(+)
AND L.FLT_NR = F.flt_nr(+)
AND (L.FLT_NR = C.FLT_NR(+) or F.back_flt_nr = C.FLT_NR)问题出在最后一个ADN条件中,PL/SQL Developer 中报:outer join operator (+) not allowed in operand of OR or IN.
试过改用 left join 连接,发现Oracle8i不支持 left join
PS: L.FLT_NR 为用户关注的航班, S.FLT_NR 为近期的所有航班, F.back_flt_nr 为用户关注的航班对应的返程航班,C.FLT_NR为近期有外籍机组的航班。
所需要的结果为:用户关注的航班或者对应的返程航班是否有外籍机组
S.SCH_DEP_DT + 1 / 3 "起飞时间(北京时)",
S.DEP_ARP_CD "起飞站",
S.ARV_ARP_CD "落地站",
S.LATEST_TAIL_NR "机尾号",
C.FCAP "外籍机组"
FROM (SELECT '3067' FLT_NR
FROM DUAL
UNION
SELECT '0321'
FROM DUAL
UNION
SELECT '0325'
FROM DUAL
UNION
SELECT '0327'
FROM DUAL
UNION
SELECT '0345'
FROM DUAL
UNION
SELECT '0455'
FROM DUAL
UNION
SELECT '0467'
FROM DUAL
UNION
SELECT '0383'
FROM DUAL
UNION
SELECT '0359'
FROM DUAL
UNION
SELECT '0301'
FROM DUAL
UNION
SELECT '0302' FROM DUAL) L,
(SELECT *
FROM SCH_DOPS_SOFL S
WHERE S.SCH_DEP_DT BETWEEN SYSDATE - 1 / 3 AND
TRUNC(SYSDATE) - 1 / 3 + 1 + 11 / 24) S,
(select s.flt_dt, a.flt_nr, s.flt_nr as back_flt_nr, s.latest_tail_nr
from Sch_dops_sofl s,
(select s.flt_nr,
s.latest_tail_nr,
s.sch_dep_dt,
s.sch_arv_dt,
s.dep_arp_cd,
s.arv_arp_cd
from Sch_dops_sofl s,
(SELECT '3067' FLT_NR
FROM DUAL
UNION
SELECT '0321'
FROM DUAL
UNION
SELECT '0325'
FROM DUAL
UNION
SELECT '0327'
FROM DUAL
UNION
SELECT '0345'
FROM DUAL
UNION
SELECT '0455'
FROM DUAL
UNION
SELECT '0467'
FROM DUAL
UNION
SELECT '0383'
FROM DUAL
UNION
SELECT '0359'
FROM DUAL
UNION
SELECT '0301'
FROM DUAL
UNION
SELECT '0302' FROM DUAL) M
where M.FLT_NR = s.flt_nr(+)
and s.flt_dt BETWEEN SYSDATE - 1 / 3 AND
TRUNC(SYSDATE) - 1 / 3 + 1 + 11 / 24) a
where s.latest_tail_nr = a.latest_tail_nr
and s.dep_arp_cd = a.arv_arp_cd
and s.sch_dep_dt between a.sch_arv_dt and a.sch_arv_dt + 12 / 24) F,
(SELECT DISTINCT S.Flt_Nr, S.LATEST_TAIL_NR, 'Y' AS FCAP
FROM ROSTER_V R, DUTY_PRD_SEG_V D, SCH_DOPS_SOFL S, CREW_V C
WHERE R.SERIES_NUM = D.SERIES_NUM
AND R.SCHED_NM = D.SCHED_NM
AND R.STAFF_NUM = C.STAFF_NUM
AND S.CREW_DEP_DT = D.RESCHEDULED_FLT_DT_TM - 1 / 3
AND TRIM(S.FLT_NR || S.OP_SUFFIX) = D.FLT_NUM
AND S.LATEST_DEP_ARP_CD = D.ACT_PORT_A
AND S.LATEST_ARV_ARP_CD = D.ACT_PORT_B
AND D.RESCHEDULED_FLT_DT_TM BETWEEN SYSDATE AND
TRUNC(SYSDATE) + 1 + 11 / 24
AND D.DELETE_IND = 'N'
AND D.DUTY_CD = 'FLY'
AND D.FD_IND = 'Y'
AND C.NATIONALITY_CD <> 'CN') C
WHERE L.FLT_NR = S.FLT_NR(+)
AND L.FLT_NR = F.flt_nr(+)
AND (L.FLT_NR = C.FLT_NR(+) or F.back_flt_nr = C.FLT_NR)问题出在最后一个ADN条件中,PL/SQL Developer 中报:outer join operator (+) not allowed in operand of OR or IN.
试过改用 left join 连接,发现Oracle8i不支持 left join
PS: L.FLT_NR 为用户关注的航班, S.FLT_NR 为近期的所有航班, F.back_flt_nr 为用户关注的航班对应的返程航班,C.FLT_NR为近期有外籍机组的航班。
所需要的结果为:用户关注的航班或者对应的返程航班是否有外籍机组
解决方案 »
- 求助 生产库中ORA-04025: maximum allowed library object lock allocated for select
- 初学者求指导,导入DMP表在哪查看?
- 求救,如何将A表的值赋值给C表,A表的和C表的一个外键B表的主键
- ODI 启动agentscheduler报错
- 数据库连接超时问题
- oracle如何批量创建function同义词?
- 如何把long类型的数据插入到blob字段中去?
- 关于DBWn的一个问题?
- ora-01034:oracle not available,怎么回事呀?
- 关于OCI(oracle call inerfacle)的书籍 100分/本 在线等待
- 求教-可以用触发器调用带参数的存储过程吗
- 菜鸟求大神指点to_date相加减的问题
..
where
L.FLT_NR = S.FLT_NR(+)
AND L.FLT_NR = F.flt_nr(+)
AND L.FLT_NR = C.FLT_NR(+) union allselect * from
..
where
L.FLT_NR = S.FLT_NR(+)
AND L.FLT_NR = F.flt_nr(+)
AND F.back_flt_nr = C.FLT_NR)
只能用union了吗?这样写的话SQL语句太长了。