我想根据临时表的值(来自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,我不想使用更新连接,也没有合并语法,因为我已经有了解决方案。我正在寻找一个简单的更新查询来使用。
答案 0 :(得分:1)
在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
子句,则会删除不在临时表中的national_id
个用户。
这假设您只想更新现有用户的值。如果你想同时添加新用户和插入值,那么代码会更复杂。