【问题标题】:SQL 00918. 00000 - "column ambiguously defined"SQL 00918.00000 - “列定义不明确”
【发布时间】:2015-03-17 16:02:50
【问题描述】:

所以我的 sql oracle 代码中出现“列不明确定义”错误,我无法弄清楚为什么会出现错误。我知道这意味着代码无法确定要使用同名的两列中的哪一列,所以我需要使用前缀。但我的前缀都是正确的。我在网站上查看了有关此错误消息的其他问题,但无法弄清楚。

ORA-00918: kolumn inte entydigt definierad 00918. 00000 - “列定义不明确” *原因:
*行动: 行错误:4 列:5

SELECT KUND.KNR, KUND.FNAMN, KUND.ENAMN
FROM KUND, ORDERRAD, KUNDORDER, KUNDORDER, ARTIKEL, VARUGRUPP
WHERE KUND.KNR = KUNDORDER.KNR
AND KUNDORDER.ORDNR = ORDERRAD.ORDNR
AND ORDERRAD.ARTNR = ARTIKEL.ARTNR
AND ARTIKEL.VGNR = VARUGRUPP.VGNR
AND VARUGRUPP.VGNAMN = 'skäggvård' OR VARUGRUPP.VGNAMN = 'bondgård';

【问题讨论】:

  • 好吧,你仍然使用KUNDORDER 两次,但没有给它们一个唯一的别名,所以,显然它是模棱两可的。另外,您确定 OR 不应该在括号之间吗?最后,我将开始使用显式连接而不是隐式连接

标签: sql oracle


【解决方案1】:

您两次加入表 KUNDORDER,因此您必须使用别名来帮助 oracle 区分它们。

但是看看这个,很可能你打算加入这个表一次,这是一个错字。

附带说明:您正在使用已弃用的隐式连接表示法:最好使用FROM tablename JOIN table1 ON (...) JOIN table2 ON (...)-notation。

第二点说明:最好始终为连接的表使用别名以提高可读性,例如:FROM table1 t1 JOIN table2 t2 ON (...)

【讨论】:

  • 我会说使用 ansi join 不是“更好”而是“值得怀疑”的做法。特别是如果查看 Oracle 在这里有多少(不是很多)错误。
猜你喜欢
  • 1970-01-01
  • 2011-11-07
  • 2016-05-18
  • 1970-01-01
  • 1970-01-01
  • 2014-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多