0
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 标准的两个查询有区别??通过回答上述问题,请帮助我!!!

4

2 回答 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

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

于 2009-07-24T09:50:02.247 回答
0

使用旧的 ANSI 语法的 OUTER JOINS 是模棱两可的,所以谁知道查询优化器对此的理解。

如果第一个 SQL 产生了正确的行,那么忘记 ANSI 版本并继续前进。

于 2009-07-24T07:58:02.783 回答