2016-04-25 18 views
0
UPDATE s 
SET s.TECH_NAME = r1.TECH_NAME 
FROM **ERRMSG** s INNER JOIN **RAWDATA** r1 on 
s.id = r1.id; 

我想從表中表ERRMSG更新tech_name RAWDATA .Joining條件ID.Whats在上述query.Im收到以下錯誤如何將列從一個表複製到另一個可以通過ID連接的列?

Error at Command Line : 62 Column : 1 
Error report - 
SQL Error: ORA-00933: SQL command not properly ended 
00933. 00000 - "SQL command not properly ended" 
*Cause:  
*Action: 

回答

0

這聽起來像這裏記錄的MERGE語句工作: https://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9016.htm

這更多的是什麼你試圖做的精神,它避免了相關子查詢,它給你更多的靈活性。

merge into errmsg s 
    using rawdata r1 
    on (s.id = r1.id) 
when matched then update set s.tech_name = r1.tech_name 

如果需要,您還可以使用MERGE的其他功能;例如,當不匹配時,errmsg表中的id在rawdata表中沒有相應的id。你還想在這種情況下采取行動嗎?例如,您可以將tech_name設置爲NULL或某個默認值,或者完全刪除該行 - 您可以在一個 MERGE語句中執行所有這些操作。請參閱我提供的文檔。

0

什麼是錯的就是錯的那您正在使用Oracle不支持的語法。使用相關子查詢來代替:

UPDATE errmsg s 
    SET s.TECH_NAME = (SELECT r1.TECH_NAME FROM rawdata r1 WHERE s.id = r1.id) 
    WHERE EXISTS (SELECT 1 FROM rawdata r1 WHERE s.id = r1.id) 
+0

您的存在查詢是否比這更有效? 'UPDATE s SET s.TECH_NAME =(選擇r1.TECH_NAME FROM RAWDATA r1,其中s.id = r1.id)' – cableload

+0

@cableload。 。 。有可能。它更準確,因爲它在沒有匹配時不會將「TECH_NAME」設置爲「NULL」。 –

相關問題