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标准存在差异? 通过回答上述问题,请帮帮我!!!
答案 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版本并继续。