【问题标题】:Getting column ambiguously defined when I shouldn't. Why?当我不应该时,模糊地定义列。为什么?
【发布时间】:2017-07-11 21:20:45
【问题描述】:

当我使用UNION ALL 将它们放在一起时,我有两个返回结果的表,如下所示:

SELECT * FROM TABLE_A
UNION ALL 
SELECT * FROM TABLE_A

但由于某种原因,当我将此代码添加到 WITH 子句中时,如下所示,它不起作用:

WITH            
SQ_Union AS
(
    SELECT * FROM TABLE_A
    UNION ALL 
    SELECT * FROM TABLE_A
)
SELECT 
    *
FROM 
    SQ_Union

当我运行时,我得到以下信息:

ORA-00918: column ambiguously defined

两个表的列相同,名称相同,但表名和数据内容不同。为什么它在没有WITH 子句的情况下运行,而不是在它的情况下运行?

【问题讨论】:

  • 您的示例中只有一个表 TABLE_A 并且查询工作正常。你能检查你的查询并提供不起作用的 sql 吗?
  • 错误信息应指向代码中的特定行,请同时提供该信息。

标签: oracle with-statement union-all ambiguous


【解决方案1】:

我故意以这种方式创建表格。

create table a (a1 number, b1 number);
create table b (b1 number, a1 number);

insert into a values (1, 2);
insert into b values (3, 4);
commit;

WITH            
   SQ_Union AS (
      SELECT * FROM a
      UNION ALL 
      SELECT * FROM b
   )
SELECT * FROM SQ_Union;

我无法在 Oracle 12.1.0.2 上失败。我怀疑您对未共享的代码有疑问。

顺便说一句,以上文本将被视为MCVE。当您尝试创建一个时,您无疑会找到问题的原因。引用我最喜欢的角色之一,“慢慢来”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    • 2023-02-04
    • 2020-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多