我想转换以下查询:
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/
提前致谢, 本
答案 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连接以避免这种情况。