Oracle SQL中 (+) 不能出现在 OR 字句中
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为近期有外籍机组的航班。
所需要的结果为:用户关注的航班或者对应的返程航班是否有外籍机组
[解决办法]
那你就分开写,写两个union 字句
[解决办法]
闲太长的话。。那你就用动态SQL啊,用if else 或者case when 判断。。。