我有2个表,其中一列名称相同。列是BAN_KEY
当我运行此查询时
with
t1 as
(
select *
from table1
),
t2 as
(
select *
from table2
)
t3 as
(
select *
from t1, t2
where t1.c1 = t2.c2
)
select * from t3
我错误地定义了错误列,但是当我这样做时
with
t1 as
(
select *
from table1
),
t2 as
(
select *
from table2
)
select *
from t1, t2
where t1.c1 = t2.c2
结果如下所示
BAN_KEY | BAN_KEY_1 | other columns
some values...
原因是什么?
答案 0 :(得分:4)
首先,学会使用正确的JOIN
语法。简单规则:从不在FROM
子句中使用逗号。 始终使用正确的JOIN
s。
这与你的问题无关。答案要简单得多。对于CTE(或表),Oracle需要能够为结果分配列名,以便随后可以访问它们。它接受您提供的列名称,假设您的意图是正确的。不允许使用重复的列名,因为引用不明确;因此错误。
为什么结果集不会发生这种情况? Oracle不要求查询的结果集中的列是唯一的。但是为了方便起见,它区分了具有相同名称的列。