我有两个表:源表和目标表。目标表将具有源表的列的子集。我需要通过与基于另一列的源表联接来更新目标表中的单个列。更新语句如下:
UPDATE target_table tt
SET special_id = ( SELECT source_special_id
FROM source_table st
WHERE tt.another_id = st.another_id )
由于某种原因,该语句似乎无限期运行。内部选择由其自身执行时几乎立即发生。该表大约有50,000条记录,并将其托管在功能强大的计算机上(资源不成问题)。
我这样做正确吗?是否有上述原因无法及时解决?还有更好的方法吗?
最佳答案
初始查询对外部表中的每一行执行一次内部子查询。看看Oracle是否更喜欢这个:
UPDATE target_table
SET special_id = st.source_special_id
FROM
target_table tt
INNER JOIN
source_table st
WHERE tt.another_id = st.another_id
(已更正发布的查询后进行编辑)
添加:
如果联接语法在Oracle上不起作用,该如何处理:
UPDATE target_table
SET special_id = st.source_special_id
FROM
target_table tt, source_table st
WHERE tt.another_id = st.another_id
关键是要联接两个表,而不是使用当前使用的外部查询语法。
关于sql - 如何加快SQL中的联合更新?我的陈述似乎无限期地执行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/314307/