Oracle 左外连接

问题描述 投票:0回答:2
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 标准的两个查询存在差异?? 通过回答上述问题,请帮助我!!!

oracle standards ansi-sql-92
2个回答
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

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


0
投票

旧的 ANSI 语法的外部连接是模棱两可的,所以谁知道查询优化器对此有什么理解。

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

© www.soinside.com 2019 - 2024. All rights reserved.