Sql 在Oracle MERGE中使用Id加入时更新Id
表1:人员Sql 在Oracle MERGE中使用Id加入时更新Id,sql,oracle,Sql,Oracle,表1:人员 ID, colx... 10 20 30 40 50 60 表2:待合并 ID, colx..., Old_ID 10, ..., null 20, ..., null 300, ..., 30 40, ..., null 50, ..., null 600, ..., 60 我想根据这个标准将表1(PERSON)更新为表2(TBL_MERGE) 伪代码: IF tbl_merge.old_id IS NOT NULL AND tb
ID, colx...
10
20
30
40
50
60
表2:待合并
ID, colx..., Old_ID
10, ..., null
20, ..., null
300, ..., 30
40, ..., null
50, ..., null
600, ..., 60
我想根据这个标准将表1(PERSON)更新为表2(TBL_MERGE)
伪代码:
IF tbl_merge.old_id IS NOT NULL AND tbl_merge.old_id = person.id THEN
person.id = tbl_merge.id
谢谢如果您想
更新PERSON
中的数据,为什么要使用合并
语句而不是更新
语句?如果PERSON
中没有匹配的行,您是否也希望从TBL\u MERGE
向PERSON
插入INSERT
。不,我不必担心inserts.MERGE有时在仅更新的情况下很有用(例如,当查询很复杂时,您可能不想在update语句中指定它两次),但在这种情况下不可能,因为您正在更新用作匹配标识符的列。您需要根据@Declan_K的答案使用更新。如果PERSON.ID与TBL_MERGE.OLD_ID中的值不匹配,则必须更改该值,因为它将尝试使用NULL.Updated更新PERSON.ID,以消除更新为NULL
的可能性。如果存在,则需要s。“表或视图不存在”也,=(选择m.ID…)您是指t.ID吗?如果是,仍然是相同的错误。
UPDATE person p set ID = (SELECT t.ID FROM tbl_merge t where t.old_id = p.ID)
WHERE EXISTS (Select 1 FROM tbl_merge t where t.old_id = p.ID)