SELECT * FROM A,B
WHERE
A.COMP_CODE = B.COMP_CODE (+)
AND
A.DATE = TO_CHAR(ADD_MONTHS(TO_DATE(B.DATE,'yyyymm'),-1),'YYYYMM') (+)
当我执行此语句时,我收到错误:ORA-00936。 当我在结尾处删除(+)时此语句可以正常工作,但我希望在此语句中保留(+)。
答案 0 :(得分:2)
对外部联接使用旧的(+)
语法时,(+)
应该直接跟随您的外部联接的列,而不是整个表达式:
SELECT *
FROM A, B
WHERE A.COMP_CODE = B.COMP_CODE (+)
AND
A.DATE = TO_CHAR(ADD_MONTHS(TO_DATE(B.DATE (+), 'yyyymm'), 'YYYYMM')
-- Here -----------------------------------^
但老实说,这种语法已被认为已被弃用多年没有。使用现代显式outer join
语法可能会更好:
SELECT *
FROM A
LEFT OUTER JOIN B ON -- Here!
A.COMP_CODE = B.COMP_CODE
AND
A.DATE = TO_CHAR(ADD_MONTHS(TO_DATE(B.DATE, 'yyyymm'), 'YYYYMM')