在oracle中基于临时表更新表



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

用户(cid user_name)

Personal_info (user_id national_id)

临时表和Users表也有关系,使用唯一的user_name。

Tmp_Tbl (user_name nationalid)

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

在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子句,您将擦除不在temp表中的用户的national_id

这里假设您只想更新现有用户的值。如果既要添加新用户又要插入值,那么代码就比较复杂了。

最新更新