【问题标题】:SQL - Error 'ORA-00918: column ambiguously defined' in SQL DeveloperSQL - SQL Developer 中的错误“ORA-00918:列定义不明确”
【发布时间】:2016-05-18 15:44:53
【问题描述】:

所以我在生成包含多个临时表的查询时遇到了一些问题。

首先我创建了临时表。

CREATE GLOBAL TEMPORARY TABLE DIDV (DID VARCHAR(50))

INSERT INTO DIDV VALUES ('8090630909077434001');
INSERT INTO DIDV VALUES ('7471990179373590001');
INSERT INTO DIDV VALUES ('7605256906013877001');
INSERT INTO DIDV VALUES ('1604387368720407001');
INSERT INTO DIDV VALUES ('3512739534818409001');

CREATE GLOBAL TEMPORARY TABLE KEYW (KEW VARCHAR(50))

INSERT INTO KEYW VALUES ('%Corporate Insurance Pol%');
INSERT INTO KEYW VALUES ('%Tax Return%');
INSERT INTO KEYW VALUES ('%Audit%');
INSERT INTO KEYW VALUES ('%Corporate Governance%');
INSERT INTO KEYW VALUES ('%Board%');
INSERT INTO KEYW VALUES ('%Shareholder%');

然后我编写查询如下。这似乎是一个简单的查询。但是,我收到错误“ORA-00918:列不明确定义”。我不知道我是否可以对 2 个临时表进行连接,尤其是它们没有任何关系。我只想查询唯一 id 在 DIDV 表中的位置以及标题和评论列不包含 KEW 字段的结果。

SELECT TO_CHAR(DID) DID, TO_CHAR(DROOTPARENTID) PARENTID, DBARCODE, 
DDOCTITLE, XCOMMENTS, XDIVISION, DEXTOBJECTTYPE
FROM PSA.URM_EXTITEMS_PSA, DIDV, KEYW
WHERE PSA.URM_EXTITEMS_PSA.DID = DIDV.DID 
AND PSA.URM_EXTITEMS_PSA.DDOCTITLE NOT LIKE KEYW.KEW 
AND PSA.URM_EXTITEMS_PSA.XCOMMENTS NOT LIKE KEYW.KEW;

感谢任何帮助理解这一点。

如果需要任何澄清,请告诉我。

【问题讨论】:

  • DID 在选择列表中需要一个表别名。另外,学习使用正确的显式JOIN 语法。

标签: sql oracle oracle-sqldeveloper temp-tables


【解决方案1】:

DIDV 包含名为 DID 的列
一个表 URM_EXTITEMS_PSA 还包含一个名为 DID 的列(我知道这是因为 where 条件包含一个子句 WHERE PSA.URM_EXTITEMS_PSA.DID = DIDV.DID )。


查询中的 select 语句包含引用列 DID 的表达式:

SELECT TO_CHAR(DID) ....

Oracle 并不真正知道(我也不知道)您想在结果中获得哪个DID - 来自DIDV 表的“DID”列或来自DID 列来自URM_EXTITEMS_PSA 表。因此 Oracle 抛出错误ORA-00918: column ambiguously defined


只需在 select 子句中的 DIV 列中附加一个别名,DIDVURM_EXTITEMS_PSA,这样:

SELECT TO_CHAR(DIDV.DID) ....

我知道 WHERE 子句包含 PSA.URM_EXTITEMS_PSA.DID = DIDV.DID 并且实际上两个 DIDs 是相等的,所以 Oracle 应该很聪明地说 Oh, yes, he wrote PSA.URM_EXTITEMS_PSA.DID = DIDV.DID, so I can pick DID from any table ....
不幸的是,Oracle 并不那么聪明(也许他们在新版本中改进了这一点?),现在您必须附加别名或表名。

【讨论】:

  • 谢谢。你的解释很有见地。然而,我确实为 PSA.URM_EXTITEMS_PSA 添加了一个别名。我使用了 PS,因为出于某种原因,Oracle 对您用作别名的东西非常挑剔。我也不能使用 Table AS Alias。我不得不改为使用表别名。 从 PSA.URM_EXTITEMS_PSA PS、DIDV、KEYW 中选择 PS.DID、PS.DROOTPARENTID、PS.DBARCODE、PS.DDOCTITLE、PS.XCOMMENTS、PS.XDIVISION、PS.DEXTOBJECTTYPE,其中 PS.DID = DIDV.DID 和 PS .DDOCTITLE 不喜欢 KEYW.KEW 和 PS.XCOMMENTS 不喜欢 KEYW.KEW;
  • 我的查询似乎完全忽略了 PS.DID = DIDV.DID 的要求。为什么会这样做?它产生的行数比我在 DIDV.DID 中使用的 30,000 行多。
猜你喜欢
  • 2021-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多