在另一个案例/(列模糊定义)错误中工作正常

时间:2016-12-16 13:35:21

标签: sql oracle

我有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...

原因是什么?

1 个答案:

答案 0 :(得分:4)

首先,学会使用正确的JOIN语法。简单规则:从不FROM子句中使用逗号。 始终使用正确的JOIN s。

这与你的问题无关。答案要简单得多。对于CTE(或表),Oracle需要能够为结果分配列名,以便随后可以访问它们。它接受提供的列名称,假设您的意图是正确的。不允许使用重复的列名,因为引用不明确;因此错误。

为什么结果集不会发生这种情况? Oracle不要求查询的结果集中的列是唯一的。但是为了方便起见,它区分了具有相同名称的列。