例如(只是为了说明问题),
CREATE TABLE test_join(ID INT NOT NULL);
--1
SELECT ID FROM
test_join A
INNER JOIN test_join b ON 1=1;
--2
SELECT ID FROM
test_join A
INNER JOIN test_join b ON 1=1
INNER JOIN test_join c ON 1=1;
第一个给出预期的“ORA-00918:列定义不明确”。第二个执行没有任何投诉(Oracle 10g)。我想知道这是一个错误还是我在名称解析规则中遗漏了一些明显的东西。Oracle 11 在这两种情况下都给出了错误。
谢谢
这实际上是您正在使用的任何版本的 10g 中的一个错误,在您看到两个语句都出错的任何版本的 11g 中似乎已修复。
我面前没有 10g 的数据库来测试这个。我敢打赌,如果您使用旧式连接语法而不是 SQL 99 语法,那么在这两种情况下都会出错。这意味着问题在于 Oracle 没有正确地将 SQL 99 语法转换为旧式语法,并且忽略了列定义不明确的事实。