从ANSI转换为Oracle Join语法

时间:2011-02-28 12:01:52

标签: sql oracle join

我想转换以下查询:

SELECT
    request.requestId
FROM
    request
    LEFT OUTER JOIN incident ON incident.requestId = request.requestId
    LEFT OUTER JOIN changeRequest ON changeRequest.requestId = request.requestId

进入它的Oracle join语法等价物。我的第一次尝试:

SELECT
    request.requestId
FROM
    request,
    incident,
    changeRequest
WHERE
    incident.requestId = request.requestId(+)
    AND changeRequest.requestId = request.requestId(+)
由于“ORA-01417:一个表可能外部连接到最多一个其他表”错误,

不起作用。

我意识到Oracle建议使用ANSI方法,但是我正在“遭受”以下Oracle错误:

http://awads.net/wp/2007/06/14/when-ansi-sql-join-syntax-does-not-work-in-oracle/

提前致谢, 本

2 个答案:

答案 0 :(得分:7)

你有(+)错误的一面,它应该是:

SELECT
    request.requestId
FROM
    request,
    incident,
    changeRequest
WHERE
    incident.requestId (+)= request.requestId
    AND changeRequest.requestId (+)= request.requestId

BTW我假设您认识到这是 Oracle语法? Oracle已经支持ANSI连接很长一段时间了。

答案 1 :(得分:0)

仅供参考,在我们痛苦的经历中,Oracle中的复杂ANSI内部联接(版本10,11和12)偶尔会导致ORA-00600错误(核心转储)。我们被迫将许多ANSI连接回溯到Oracle连接以避免这种情况。