2015-11-04 118 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