Oracle:根据两个表之间的比较更新列
问题描述:
我有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;
任何人都可以在正确的方向指向我:上述查询?
答
你基本上就在那里。你需要在这里使用子查询语法。请注意,这里可能有两个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
;
谢谢,Munir。我确实得到了多个Subquery(Select)的结果,A中的每一行与B中的匹配。我缺少一个标准吗?就数据而言,A中的每条记录都不会与B中的匹配。 – pratyk
我的意思是A中的每一行都应该匹配B中的一行或几行,它不应该在B中有多行。我认为你应该没问题。尝试在虚拟桌面上测试它,看看它是否有效。 – Munir