2011-06-24 57 views
1

我對當前從table2.oldData填充的數據table1.fieldToChange ...但我想更新這個並將其更改爲table2.newDataSQL更新加入

這裏的代碼我正在用來嘗試和實現這一點:

UPDATE table1 
SET table1.fieldToChange = 
    (SELECT table2.newData 
    FROM table2 
    WHERE table2.oldData = table1.newData 
) ; 

但我得到'ORA-01427'錯誤。

Both table2.newData and table2.oldData是唯一標識符,只在數據庫中使用一次。任何幫助將非常感激!

謝謝

回答

0

不知道這工作在甲骨文,但在MS SQL,你可以這樣做:

UPDATE table1 
SET fieldToChange = table2.newData 
FROM table2 
WHERE table2.oldData = fieldToChange 

請注意,你不能對錶的別名更新。

+0

謝謝,只是嘗試這樣做卻得到了一個「命令無法正常結束」消息:( – Nick

+1

加分號? – Benoit

1

ORA-01427表示您在子查詢中返回多個值。修改您的查詢以包含DISTINCT子句或其他一些機制來唯一標識子查詢中的一行。

UPDATE table1 
SET table1.fieldToChange = 
    (SELECT DISTINCT table2.newData 
    FROM table2 
    WHERE table2.oldData = table1.newData 
) ; 
+0

除非你是一個主鍵,那麼您還需要添加TOP 1是絕對安全 –

+0

非常感謝這兩個,但不幸的是,它只是返回相同的結果,無論table1.fieldToChange設置爲 – Nick

+0

您的查詢,或至少您的psuedocode提供的任何機會是不正確的?我發現它是有用的時編寫更新語句寫入他們作爲SELECT首先要確保我得到預期的結果(註釋掉Update行並將SET設置爲SELECT) – billinkc

1

嘗試與MERGE statement

MERGE INTO table1 tgt 
USING (SELECT newData,oldData 
     FROM table2 
     WHERE table2.oldData = table1.newData) src 
ON (src.oldData = tgt.newData) 
WHEN MATCHED THEN 
    UPDATE SET tgt.fieldToChange = src.newData; 
+0

謝謝,但是我得到了一個無效的標識符錯誤,我似乎無法壓扁:/ – Nick

+1

如果你給我們寫了你正在使用的實際sql,可能會有幫助 – mcha

+0

MERGE INTO「Employee」a USING(SELECT「Location_Code」,「Location_Add1」 FROM「Location」 WHERE「Location」。「Location_Add1」=「Employee」 「Location_Code」)b ON(b。「Location_Add1」= a。「Gp_Nearest_Station」) 何時匹配 UPDATE SET a。「Gp_Nearest_Station」= b。「Location_Code」; – Nick

1

不要你的意思是?

UPDATE table1 
SET fieldToChange = 
    (SELECT table2.newData 
    FROM table2 
    WHERE table2.oldData = table1.fieldToChange  ---- and NOT table1.newData ? 
) ;