基于oracle中的临时表更新表

时间:2015-10-24 10:40:53

标签: sql oracle

我想根据临时表的值(来自Tmp_Tbl的nationalid)更新表的列(来自Personal_info的national_id)。

下面两个使用cid,user_id。

彼此具有pk / fk关系的表

用户(CID,USER_NAME)

的personal_info(USER_ID,national_id)

临时表还与使用user_name的Users表有关系,这是唯一的。

Tmp_Tbl(USER_NAME,nationalid)

因为它是oracle,我不想使用更新连接,也没有合并语法,因为我已经有了解决方案。我正在寻找一个简单的更新查询来使用。

1 个答案:

答案 0 :(得分:1)

在Oracle中,您可以使用子查询来执行此操作,但您需要小心。您需要在setwhere

中使用类似的子查询
UPDATE Personal p
   SET national_id = (SELECT t.nationalid
                      FROM tmp_tbl t JOIN
                           users u
                           ON t.user_name = u.user_name
                      WHERE u.cid = p.user_id
                     )
   WHERE EXISTS (SELECT 1
                 FROM tmp_tbl t JOIN
                      users u
                      ON t.user_name = u.user_name
                 WHERE u.cid = p.user_id
                );

如果省略WHERE子句,则会删除不在临时表中的national_id个用户。

这假设您只想更新现有用户的值。如果你想同时添加新用户和插入值,那么代码会更复杂。