【问题标题】:ORA-00936 when select statementORA-00936 选择语句时
【发布时间】:2018-04-28 07:18:00
【问题描述】:
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。 当我删除此语句末尾的 (+) 时,它会起作用,但我想在此语句中保留 (+)。

【问题讨论】:

  • 为什么需要 (+)
  • 我希望表 B 与表 A 左连接。
  • 为什么不使用左连接语法

标签: sql oracle join oracle11g outer-join


【解决方案1】:

当使用旧的(+) 语法进行外连接时,(+) 应该直接跟在您要外连接的列之后,而不是整个表达式:

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

【讨论】:

  • 感谢您的回答。我想用 3 个表选择数据。 SELECT * FROM A as A,B as B1,B as B2 A.COMP_CODE = B1.COMP_CODE (+) AND A.DATE = TO_CHAR(ADD_MONTHS(TO_DATE(B1.DATE,'yyyymm'),-1),'YYYYMM ') (+) AND A.COMP_CODE = B2.COMP_CODE (+) AND A.DATE = TO_CHAR(ADD_MONTHS(TO_DATE(B2.DATE,'yyyymm'),-2),'YYYYMM') (+) 你能解决吗与我的左外连接?谢谢
  • @XuânTrọngNguyễn - 你已经了解了 ANSI 语法的原理。您认为需要多少次尝试才能找到三个表格的正确公式?
猜你喜欢
  • 2017-12-20
  • 1970-01-01
  • 2021-11-22
  • 2013-02-15
  • 2022-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多