Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在Oracle MERGE中使用Id加入时更新Id_Sql_Oracle - Fatal编程技术网

Sql 在Oracle MERGE中使用Id加入时更新Id

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

表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 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)