Oracle左外连接

时间:2009-07-24 07:44:02

标签: oracle standards ansi

SELECT
    a,
    last_note_user,
    c,
    d,
    iso_src
FROM
    X
    CROSS JOIN Y
    CROSS JOIN Z
    LEFT OUTER JOIN W
        ON W.last_note_user = Z.userid
           AND W.user_ten = Y.iso_src

上面的ANSI代码获取了107条记录,当我给出没有ANSI代码的相同查询时,它获取了875条记录。非ANSI查询如下:

SELECT
    a,
    last_note_user,
    c,
    d,
    iso_src
FROM
    X,
    Y,
    Z,
    W
WHERE
    W.last_note_user = Z.userid(+)
    AND W.user_ten = Y.iso_src(+)

为什么两个查询与ANSI和没有ANSI标准存在差异? 通过回答上述问题,请帮帮我!!!

2 个答案:

答案 0 :(得分:4)

您的旧式查询在谓词的错误一侧有(+)符号。它应该是:

SELECT
    a,
    last_note_user,
    c,
    d,
    iso_src
FROM
    X,
    Y,
    Z,
    W
WHERE
    W.last_note_user (+) = Z.userid
    AND W.user_ten (+) = Y.iso_src

但我不会再使用旧式语法了。

答案 1 :(得分:0)

使用旧ANSI语法的OUTER JOINS是不明确的,因此谁知道查询优化器对此的理解。

如果第一个SQL生成正确的行,请忘记ANSI版本并继续。