我正在使用一些写得不太好的遗留 SQL。有一些模棱两可的选择似乎会产生我们大部分预期的结果,但并非总是如此。
这是我正在谈论的简化示例:
create table T1(
A VARCHAR2(10),
B VARCHAR2(10),
C VARCHAR2(10),
D VARCHAR2(10)
)
create table T2(
A VARCHAR2(10),
B VARCHAR2(10)
)
insert into T1(A, B, C, D)
values ('AA', 'BB', 'CC', 'DD' )
insert into T2(A, B)
values ('Y', 'N' )
到目前为止,没有什么不寻常的,除了正在使用的查询......
SELECT * FROM T1, T2 WHERE T2.A ='Y' A B C D A_1 B_1 AA BB CC DD Y N SELECT * FROM T2, T1 WHERE T2.A ='Y' A B A_1 B_1 C D Y N AA BB CC DD
这显然是模棱两可的,Oracle 试图通过在需要时重新指定带有后缀 _1 的列来帮助我们。在某些情况下,Oracle 会以不同的方式处理这个问题吗?例如,不同的版本等。
例如,在第一个查询中,字段 A 的值为 'AA',但可能存在相同查询将字段 A 设置为 'Y' 的情况?
现有的代码库到处都有这种东西,需要修复,现在我只是想评估一下这是一个多么严重的问题?我主要担心相同的 SQL,针对不同的 Oracle 版本运行可能会提供不同的结果。
谢谢!
编辑:要明确计划是消除查询的歧义。现在的问题是不同版本的 Oracle 将如何处理这个问题?