【发布时间】:2020-04-04 17:23:03
【问题描述】:
我正在从下面的链接做 SQL 练习 https://oracle-base.com/articles/misc/updates-based-on-queries
在子查询方法中,代码如下
UPDATE dest_tab tt
SET (tt.code, tt.description) = (SELECT st.code, st.description
FROM source_tab st
WHERE st.id = tt.id)
WHERE EXISTS (SELECT 1
FROM source_tab
WHERE id = tt.id);
我可以理解使用连接的相关部分,但是 EXISTS 运算符有什么用。根据文章,它应该在更新目标表时排除不匹配的记录。但是那应该通过加入条件来处理,对吧?那只是在源和目标之间具有匹配 id 的记录。这是因为 WHERE 子句是强制性的,以避免更新整个表,即使我们在源和目标之间有一个等连接?
【问题讨论】: