【问题标题】:Keep getting ORA-00918: column ambiguously defined. Very confused不断收到 ORA-00918:列定义不明确。很困惑
【发布时间】:2016-10-28 10:27:51
【问题描述】:

我不断收到此 ORA-00918: column ambiguously defined 错误,我不知道我做错了什么。任何帮助将不胜感激这是我的代码:

select CUSTOMER.CUS_CODE as CUS_CODE,
CUSTOMER.CUS_AREACODE as CUS_AREACODE,
INVOICE.INV_NUMBER as INV_NUMBER,
SUM(LINE.LINE_UNITS*LINE.LINE_PRICE) as Amount
from LINE LINE,
INVOICE INVOICE,
CUSTOMER CUSTOMER 
where CUSTOMER.CUS_CODE=INVOICE.CUS_CODE
and INVOICE.INV_NUMBER=LINE.INV_NUMBER
group by CUS_AREACODE, CUS_CODE

【问题讨论】:

  • 学习使用正确、明确的JOIN 语法。另外,我不确定问题是什么。查询中有两个不合格的列引用,所以答案对我来说很明显。
  • 您(至少)有两个表,其中有一个名为 CUS_CODE 的列。当你说order by CUS_CODE时,你指的是哪个表的CUS_CODE
  • @mustaccio 我正在尝试使用 CUSTOMER 表。如果我这样做group by CUS_AREACODE, CUSTOMER.CUS_CODE 它仍然给我那个错误
  • 您最好说明该列的来源,就像 mustaccio 所说的那样。不仅是CUS_CODE,还有所有的专栏。
  • 用表的原名给表起别名的逻辑是什么?

标签: sql oracle


【解决方案1】:

我强烈怀疑是GROUP BY。首先,您需要添加汇总中未使用的所有字段。其次,您应该在GROUP BY 中的所有字段上指定表或别名。将您的声明更改为

SELECT c.CUS_CODE as CUS_CODE,
       c.CUS_AREACODE as CUS_AREACODE,
       i.INV_NUMBER as INV_NUMBER,
       SUM(l.LINE_UNITS * l.LINE_PRICE) as Amount
  FROM CUSTOMER c
  INNER JOIN INVOICE i
    ON INVOICE.CUS_CODE = CUSTOMER.CUS_CODE
  INNER JOIN LINE l
    ON l.INV_NUMBER = i.INV_NUMBER
 GROUP BY c.CUS_CODE,
          c.CUS_AREACODE,
          i.INV_NUMBER

看看是否没有得到它。请注意,我更改了别名,使其简短但易于理解,并将连接更改为 ANSI 样式的连接,而不是旧的隐式连接。

祝你好运。

【讨论】:

    猜你喜欢
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多