SQL-SQL Developer中出现错误“ORA-00918:定义不明确的列”

SQL-SQL Developer中出现错误“ORA-00918:定义不明确的列”,sql,oracle,oracle-sqldeveloper,temp-tables,Sql,Oracle,Oracle Sqldeveloper,Temp Tables,因此,我在使用多个临时表生成查询时遇到了一些问题 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

因此,我在使用多个临时表生成查询时遇到了一些问题

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%');
首先,我创建了临时表

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:定义不明确的列”。我不知道是否可以连接两个临时表,尤其是它们之间没有任何关系。我只想查询DIDV表中唯一id的位置,以及标题和注释列不包含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;
任何有助于理解这一点的帮助都将不胜感激

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

表DIDV包含名为DID的列 表URM_EXTITEMS_PSA还包含一个名为DID I know this的列,因为where条件包含一个子句where PSA.URM_EXTITEMS_PSA.DID=DIDV.DID

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

Oracle真的不知道我也不知道您希望在结果中得到哪一个—来自DIDV表的“DID”列或来自URM_EXTITEMS_PSA表的DID列。因此Oracle抛出错误ORA-00918:列定义不明确

只需在select子句中的DIV列或URM_EXTITEMS_PSA列中添加别名,方法如下:

SELECT TO_CHAR(DIDV.DID) ....
我知道WHERE子句包含PSA.URM_EXTITEMS_PSA.DID=DIDV.DID,实际上这两个DID是相等的,所以Oracle应该聪明地说哦,是的,他写了PSA.URM_EXTITEMS_PSA.DID=DIDV.DID,所以我可以从任何表中选择DID。。。。 不幸的是,Oracle并不是那么聪明,也许他们在新版本中改进了这一点,现在您必须附加一个别名或表名。

表DIDV包含一个名为DID的列 表URM_EXTITEMS_PSA还包含一个名为DID I know this的列,因为where条件包含一个子句where PSA.URM_EXTITEMS_PSA.DID=DIDV.DID

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

Oracle真的不知道我也不知道您希望在结果中得到哪一个—来自DIDV表的“DID”列或来自URM_EXTITEMS_PSA表的DID列。因此Oracle抛出错误ORA-00918:列定义不明确

只需在select子句中的DIV列或URM_EXTITEMS_PSA列中添加别名,方法如下:

SELECT TO_CHAR(DIDV.DID) ....
我知道WHERE子句包含PSA.URM_EXTITEMS_PSA.DID=DIDV.DID,实际上这两个DID是相等的,所以Oracle应该聪明地说哦,是的,他写了PSA.URM_EXTITEMS_PSA.DID=DIDV.DID,所以我可以从任何表中选择DID。。。。
不幸的是,Oracle并不是那么聪明,也许他们在新版本中改进了这一点,现在您必须附加别名或表名。

选择列表中的DID需要表别名。另外,学习使用正确的显式联接语法。选择列表中的DID需要表别名。另外,学习使用正确的显式连接语法。谢谢。你的解释很有见地。不过,我确实为PSA.URM_EXTITEMS_PSA添加了一个别名。我使用PS,因为出于某种原因,Oracle对您使用的别名非常挑剔。此外,我无法将表用作别名。我不得不改为使用表别名。从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中使用的30000行多得多。谢谢。你的解释很有见地。不过,我确实为PSA.URM_EXTITEMS_PSA添加了一个别名。我使用PS,因为出于某种原因,Oracle对您使用的别名非常挑剔。此外,我无法将表用作别名。我不得不改为使用表别名。从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中使用的30000行多得多。