Oracle:根据2个表

时间:2015-11-04 17:52:32

标签: sql oracle

我有2个表 - 表A包含当前系统的数据,表B包含遗留数据。如果匹配,我试图通过附加表B中的连接数据来更新表A中的字段。

但是,由于数据的性质,没有单一的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;

有人能指出我正确的方向吗:上面的查询?

1 个答案:

答案 0 :(得分: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
;