2015-09-15 75 views
0

你能幫我解決合併查詢的錯誤嗎? 查詢:oracle合併查詢問題

MERGE INTO TEST_STATUS_REV TB1 
USING 
(
SELECT 
TB2.ITG,'1',TB2.CORP_LOAD_ID,TB2.LVL_CYC,'',TB2.BUS_FUNC,'',COUNT(TB2.status) AS Passed,'','','','',TB2.IMPT_ENG,TB2.VAL_TYP,'','' 
FROM [email protected]_PROD TB2 
where TB2.status like 'Pass%' 
and TB2.lvl_cyc='L3C1' 
GROUP BY 
     TB2.ITG, 
--  TB2.RTS,    
     TB2.CORP_LOAD_ID, 
     TB2.LVL_CYC, 
--  CONF, 
     TB2.BUS_FUNC , 
--  TB2.TC_PLN, 
--  TB2.TC_PASSED, 
--  TB2.TC_FAILED, 
--  TB2.NAV, 
--  TB2.PND 
--  TB2.COM, 
     TB2.IMPT_ENG, 
     TB2.VAL_TYP 
--  TB2.TC_TOT 
--  TB2.FEAT_ID 
    ) SRC 
ON 
(
TB1.LVL_CYC = SRC.LVL_CYC 
) 
WHEN MATCHED THEN UPDATE SET TB1.TC_PASSED = SRC.STATUS; 

錯誤:

Error report: 
SQL Error: ORA-00918: column ambiguously defined 
00918. 00000 - "column ambiguously defined" 

我試圖修復它許多可能的方法,但仍是問題仍然存在。

+0

嘗試對TB2.ITG後的'1'進行註釋,並嘗試清除您的查詢,大量評論它很混亂 – Thomas

回答

1

我現在沒有辦法在pl/sql dev上檢查它,但我會責怪源查詢語句。您需要命名所有''或'1'列,以便稍後在'WHEN'子句中調用它們! 請嘗試,並告訴我們是否奏效:) 編輯:這應該是:

TB2.ITG, '1' 爲,TB2.CORP_LOAD_ID,TB2.LVL_CYC '' 爲b,TB2.BUS_FUNC」 'as c,COUNT(TB2.status)AS Passed,''as d''as e,'as f','g,TB2.IMPT_ENG,TB2.VAL_TYP''as h,''as i

+0

如果單獨運行,select查詢工作正常..當它沿用與合併查詢我收到提到的錯誤。 – akira

+0

這並不意味着這不是解決方案。當你自己運行查詢時,調用哪些列並不重要 - 在內聯視圖中它肯定會這樣做。 –

+0

如果您要以任何方式引用列 - 您應該使用別名。這就是查詢獨立工作的原因。如果你把它放在select * from(你的查詢)中,它也會抱怨!對我來說,最好的做法可能就是始終使用別名 - 你不需要記住何時使用它們,什麼時候不能。 –

0

那麼你不需要SET子句中的表別名。這應該是:

WHEN MATCHED THEN UPDATE SET TC_PASSED = SRC.STATUS; 

不知道這是修復。

+0

大衛仍然是一樣的錯誤。 – akira