2016-02-08 37 views
1

所以我有一些問題產生一個包含多個臨時表的查詢。SQL - 在SQL Developer中錯誤'ORA-00918:列模糊定義'

首先我創建了臨時表。

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:列明確定義」。我不知道我是否可以加入兩張臨時牌,特別是他們沒有任何關係。我只想查詢唯一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; 

任何幫助理解這一點,表示讚賞。

如果需要澄清,請讓我知道。

+3

選擇列表中的DID需要表別名。另外,學會使用適當的顯式'JOIN'語法。 –

回答

0

一個表DIDV包含一個名爲DID
列的表URM_EXTITEMS_PSA還包含一個名爲DID柱(我知道這是因爲WHERE條件包含一個條款WHERE PSA.URM_EXTITEMS_PSA.DID = DIDV.DID)。


在查詢的SELECT語句包含的表達式中引用的列DID

SELECT TO_CHAR(DID) .... 

甲骨文並不知道(我不知道也行)你想獲得這DID做結果 - 來自DIDV表的「DID」列或來自URM_EXTITEMS_PSA表的DID列。因此Oracle引發錯誤ORA-00918: column ambiguously defined


的aliast就追加到SELECT子句中這個DIV列,要麼DIDVURM_EXTITEMS_PSA,以這樣的方式

SELECT TO_CHAR(DIDV.DID) .... 

我知道,WHERE子句包含PSA.URM_EXTITEMS_PSA.DID = DIDV.DID,實際上都DID甲骨文應該聰明地說Oh, yes, he wrote PSA.URM_EXTITEMS_PSA.DID = DIDV.DID, so I can pick DID from any table ....
不幸的是甲骨文不是很聰明(也許他們改善了這一點新版本?),現在你必須附加一個別名或表名。

+0

謝謝。你的解釋非常有見地。但是我做了一個別名到PSA.URM_EXTITEMS_PSA。我使用了PS,因爲由於某種原因,Oracle對你使用的Alias非常挑剔。我也無法使用Table AS Alias。我必須改用Table Alias。 __SELECT PS.DID, PS.DROOTPARENTID, PS.DBARCODE, PS.DDOCTITLE, PS.XCOMMENTS, PS.XDIVISION, PS.DEXTOBJECTTYPE FROM PSA.URM_EXTITEMS_PSA PS,DIDV,KEYW WHERE PS.DID = DIDV.DID AND PS.DDTITTITLE NOT LIKE KEYW.KEW AND PS.XCOMMENTS NOT LIKE KEYW。KEW; __ – Charles

+0

看起來好像我的查詢完全忽略了PS.DID = DIDV.DID的要求。爲什麼會這樣做?它產生的方式多於我在DIDV.DID中使用的30,000行。 – Charles