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標準を使用しない場合の2つのクエリに違いがあるのはなぜですか?? 上記の質問に答えて、私を助けてください!!!

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 に答える