我正在通过下面的链接进行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的记录。这是因为即使我们在Source和Target之间建立了均等联接,还是必须使用WHERE子句来避免更新整个表?
这很简单,因为否则会得到NO_DATA_FOUND
异常。
如果您尝试执行查询
SELECT st.code, st.description
FROM source_tab st
WHERE st.id = :id
它将为id
中不存在任何记录的任何source_tab
给出此错误。因此,您必须事先进行检查以避免错误。