2011-09-28 162 views
7

我有兩個不同的表:Table_a和Table_b,都有相同的列PartNo和Material_Desc。當PartNo爲等於時,我希望Table_b中的Material_Desc更新Table_a中的Material_Desc。這是我的查詢SQL ORACLE ORA-00969:缺少關鍵字?

MERGE INTO Table_b 
USING (SELECT t1.rowid AS rid 
       , t2.Material_Desc 
     FROM Table_b t1 
      JOIN Table_a t2 
      ON Table_b.PartNo = Table_a.PartNo) 
ON rowid = rid 
WHEN MATCHED THEN 
    UPDATE 
    SET Table_a.Material_Desc = Table_b.Material_Desc; 

我知道Oracle不支持更新語句的連接,所以我嘗試了上面的查詢。它仍然給我ORACLE ORA-00969:缺少ON關鍵字錯誤

+0

見我對這個答案的評論:http://stackoverflow.com/a/2446859/244826後 – Sonny

+1

條件的''ON **必須**在括號中:'ON(rowid = rid)' –

回答

6

你可以把 「(」 和 「)」。所以寫:

ON ROWID =擺脫

2

首先,語法問題:當你使用子查詢進行合併時,你必須將它別名化。但更重要的是,你不需要使用子查詢。

MERGE INTO Table_a USING Table_b ON (Table_a.PartNo = Table_b.PartNo) 
WHEN MATCHED THEN UPDATE SET Table_a.Material_Desc = Table_b.Material_Desc 

首先,您必須將要更新的表放入INTO部分。其次,在子查詢中加入併合並rowid不會爲您帶來任何我能想到的好處。

+0

正在獲取ORA-30926:無法獲得上述查詢源表中的穩定行集錯誤 – sailaja

+0

也許這有助於理解ORA-30926:https ://forums.oracle.com/forums/thread.jspa?threadID = 257751查看最新評論。 –

+0

對不起,我沒有從上面的鏈接的最後評論中得到它,請幫助我。 – sailaja

0

也許不那麼有效,因爲合併statment,但應該做的工作:

update table_b tb 
set tb.Material_Desc = (select ta.Material_Desc 
         from table_a ta 
         where ta.PartNo = tb.PartNo 
         and rownum = 1 
         ) 
where tb.rowid in (
        SELECT t1.rowid      
        FROM Table_b t1 
         , Table_a t2 
        WHERE t1.PartNo = t2.PartNo 
        ) 
+0

該查詢給出了ORA-01427:單行子查詢返回多個行錯誤。 – sailaja

+0

@sailaja:我認爲partno是獨一無二的。我已經調整了我的答案,因此只有第一個找到的條目被採用 – schurik

+0

不,每個Part_No都有多個值,例如ex.001A有100個項目,001B有50個項目具有唯一的Serial_No,但是說明相同,所以我有另一個table(table_a)僅包含PartNo&Material_Desc,我想從這個table_a更新這些PartNo的所有desc – sailaja