我想根据临时表(来自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中,您可以使用子查询来完成此操作,但您需要小心。您需要在set
和where
中使用类似的子查询:
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
。
这里假设您只想更新现有用户的值。如果既要添加新用户又要插入值,那么代码就比较复杂了。