【问题标题】:ORA 00918- Column ambiguosly defined error [duplicate]ORA 00918-列模糊定义错误[重复]
【发布时间】:2013-09-22 06:19:46
【问题描述】:

我的 Oracle 数据库中有两个表。

第一个表是(客户)-

customer_id Customer_name Customer_age Customer_address salary
103 Giriraj Rathi      22   Kolkata    12000
100 Subir Adhikari     22   Bolpur     10000
101 Rakesh Chatterjee  21   Tarkeshwar 8000
102 Jayanta Patra      20   Tarkeshwar 9000
104 Abhi Karmakar      22   Burdwan    8000
105 Mainak Manna       21   Burdwan    9000
106 Subho Gupta        20   Kolkata    10000
107 Aritra Das         23   Kolkata    7000
108 Pradip Paul        22   Kolkata    5000
109 Sourav Banerjee    22   Bolpur     9000

第二张表是(订单):

Order_id Order_date   customer_id  amount

200 12-03-13    100 1100
201 09-05-13    101 1400
202 07-04-12    103 2500
204 29-05-13    104 2400
203 09-02-13    105 9000
205 18-06-13    106 2100
206 09-07-13    107 1600
207 18-05-13    108 2900
209 18-04-13    109 2400

现在我想加入这两个表。所以我使用了查询:

select customer_id,
       customer_name,
       customer_address, 
       order_id,order_date, 
       amount 
  from customers, 
       orders 
 where customers.customer_id=orders.customer_id; 

我在谷歌上搜索了这个错误,发现当 SQL 代码本身存在歧义时会发生这种情况,但在这种情况下我什么也没看到。

【问题讨论】:

  • 我不知道你的 Google Fu 有多好,但你没有在 StackOverflow 搜索框中输入那个错误号。否则你会在这方面找到几十个线程,几乎任何一个都会回答你的问题。 stackoverflow.com/search?q=ORA+00918
  • @APC,您链接到的问题比我的问题要复杂一些,而代码/概念中的错误太基本而无法捕捉;所以我坚持这个问题不应该被关闭,而是在我看来这是最简单的问题,未来的访问者很容易发现他们的错误。
  • 同一主题的问题太多只会制造噪音。有 16 个问题标记为 [ora-00918],还有近 50 个问题提到了该错误消息。

标签: sql oracle oracle10g ora-00918


【解决方案1】:

像这样将表名/别名添加到列中总是一个好主意

select c.customer_id,
       c.customer_name, 
       c.customer_address, 
       o.order_id,
       o.order_date,
       o.amount 
from customers c
inner join orders o on c.customer_id = o.customer_id

如果您不这样做,那么数据库不知道要采用哪一列,并且两个表都有一个名为 customer_id 的列。

【讨论】:

  • 不用说,这解决了问题。但我很想知道错误可能在哪里?
  • 请注意,我在代码中使用了表名where customers.customer_id=orders.customer_id;,其中customersorders 是表。
  • 就像我说的。两个表都有一个同名的列。 customer_id。当您说select customer_id ... 时,数据库应该采取什么措施?
  • 但不在您的选择子句中
  • 好的,现在我明白了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多