gpt4 book ai didi

Oracle 11g 第 1 版与第 2 版 — LEFT OUTER JOIN 的不同行为

转载 作者:行者123 更新时间:2023-12-04 12:59:25 25 4
gpt4 key购买 nike

我在从 Oracle 11g 第 1 版升级到第 2 版后发现了这一点。

我现在能总结的最好的是 LEFT OUTER JOIN针对具有常量“假”列和 WHERE 的查询子句在两个 Oracle RELEASES 中生成不同的结果。在第 2 版中,“假”列显示在不匹配的行中:

TEST1      TEST2
===== =====
A B A B
- --- - ---
1 bar 1 hello
2 baz

> SELECT * FROM test1 LEFT OUTER JOIN test2 ON test1.a = test2.a;
A B A_1 B_1
- --- --- -----
1 bar 1 hello
2 baz

到现在为止还挺好。以上所有内容在 Rel 上都相同。 1 和 2. 现在,添加一个“假”常量列 X,事情按预期工作:
> SELECT * 
FROM test1
LEFT OUTER JOIN (SELECT test2.*, 'X' AS X
FROM test2) test3
ON test1.a = test3.a;

A B A_1 B_1 X
- --- --- ----- -
1 bar 1 hello X
2 baz

现在,添加一个 WHERE第一个表上的子句并获得 不同 结果:
> SELECT * 
FROM test1
LEFT OUTER JOIN (SELECT test2.*, 'X' AS X
FROM test2) test3
ON test1.a = test3.a
WHERE test1.b LIKE 'ba%';

Release 11.1.0.7.0 Release 11.2.0.2.0
================== ==================
A B A_1 B_1 X A B A_1 B_1 X
- --- --- ----- - - --- --- ----- -
1 bar 1 hello X 1 bar 1 hello X
2 baz 2 baz X <--- WHAT'S THIS?!

进一步的困惑:如果 WHERE 条件是数字(例如, WHERE test1.a < 5 ,结果是一样的!

更新(澄清我的实际问题):
我做错了什么?我的最终查询是否以某种方式调用了一个未定义的行为,使得 Oracle 可以将一个版本返回的内容更改为下一个版本?如果不是,这是 Oracle 错误吗?

最佳答案

所以我要回答我自己的问题,即:“我做错了什么还是这是一个 Oracle 错误?”与 这是一个 Oracle 错误 .

我把它留给你来导航被称为 support.oracle.com 的疯狂,但是,正如@AdamHawkes 指出的那样,这个错误可能在最近的 Oracle 补丁集中得到解决。 11.2.0.3 发行说明中的​​几个错误似乎与我的问题相似,但并不完全相同。

当我应用最新的补丁时,我会尝试回到这里并更新答案(我处于无法控制的环境中)。

关于Oracle 11g 第 1 版与第 2 版 — LEFT OUTER JOIN 的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11366039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com