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 标准的两个查询存在差异?? 通过回答上述问题,请帮助我!!!
您的旧式查询在谓词的错误一侧有 (+) 符号。应该是:
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 语法的外部连接是模棱两可的,所以谁知道查询优化器对此有什么理解。
如果第一个 SQL 生成了正确的行,忘记 ANSI 版本并继续。