Oracle:相关更新中存在需求

问题描述 投票:0回答:1

我正在通过下面的链接进行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子句来避免更新整个表?

oracle exists
1个回答
0
投票

这很简单,因为否则会得到NO_DATA_FOUND异常。

如果您尝试执行查询

SELECT st.code, st.description
  FROM   source_tab st
 WHERE  st.id = :id

它将为id中不存在任何记录的任何source_tab给出此错误。因此,您必须事先进行检查以避免错误。

© www.soinside.com 2019 - 2024. All rights reserved.