在一种情况下,在另一个情况下(列模棱两可)的错误在另一种情况下的错误



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

这样做的原因是什么?

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

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

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

相关内容

最新更新