2015-11-04 75 views
0

我有2個表 - 表A包含來自當前系統的數據和包含遺留數據的表B.如果匹配,我試圖通過附加表B的連接數據來更新表A上的一個字段。Oracle:根據兩個表之間的比較更新列

但是,由於數據的性質,沒有單一的ID字段,匹配標準是姓名,出生日期和婚前姓名字段。

我認爲以下可能工作,但我遇到了「SQL錯誤:ORA-00933:SQL命令未正確結束」。

UPDATE A 
SET A.HISTORY = A.HISTORY ||'Org:= ' || B.ORG ||' | Group:= ' || B.GROUP || ' | Campus:= ' || B.CAMPUS || ' | Year:= ' || B.YEAR || ' | Comments:= ' || B.COMMENT 
FROM CURRENT_DATA A, LEGACY_DATA B 
WHERE A.DOB    = B.BDOB 
AND A.FIRST_NAME  = B.FIRST_AA 
AND A.MIDDLE_NAME  = B.MID_AB 
AND A.LAST_NAME  = B.LAST_AC 
AND A.MAIDEN_NAME = B.MAIDEN_AD; 

任何人都可以在正確的方向指向我:上述查詢?

回答

0

你基本上就在那裏。你需要在這裏使用子查詢語法。請注意,這裏可能有兩個WHERE語句,首先在子查詢中定義子查詢輸出的內容,另一個用於確定哪些行被更新的UPDATE語句本身。下面的查詢將更新表A中的所有行。此外,子查詢應該只返回A中每行的一個結果。

UPDATE A 
SET A.HISTORY = (SELECT 
     A.HISTORY ||'Org:= ' || B.ORG ||' | Group:= ' || B.GROUP || ' | Campus:= ' || B.CAMPUS || ' | Year:= ' || B.YEAR || ' | Comments:= ' || B.COMMENT 
    FROM CURRENT_DATA A, LEGACY_DATA B 
    WHERE A.DOB    = B.BDOB 
     AND A.FIRST_NAME  = B.FIRST_AA 
     AND A.MIDDLE_NAME  = B.MID_AB 
     AND A.LAST_NAME  = B.LAST_AC 
     AND A.MAIDEN_NAME = B.MAIDEN_AD 
    ) 
--WHERE condition for which rows to updated, if needed 
; 
+0

謝謝,Munir。我確實得到了多個Subquery(Select)的結果,A中的每一行與B中的匹配。我缺少一個標準嗎?就數據而言,A中的每條記錄都不會與B中的匹配。 – pratyk

+0

我的意思是A中的每一行都應該匹配B中的一行或幾行,它不應該在B中有多行。我認爲你應該沒問題。嘗試在虛擬桌面上測試它,看看它是否有效。 – Munir