【发布时间】:2013-11-19 09:44:19
【问题描述】:
我必须使用其他两个表中的数据更新表 (table3)。 这两个表 (table1,table2) 都描述了单个对象,因此 table1.id 等于该单个对象的 table2.id。 表 3 是该对象的多对多映射表和另一个在这里不重要的映射表。我需要将 table1 和 table2 中的一些数据放入该映射表中。
我正在尝试使用相关查询更新 table3,但需要很长时间才能完成。我对大约 500.000 条记录的组运行了这个查询,现在它运行了一个多小时。
我在这里做错了吗?
UPDATE table3 t3
SET (t3.some_value1, t3.other_value1, t3.some_value2, t3.other_value2) =
( SELECT t1.some_value1, t1.other_value1, t2.some_value2, t2.other_value2
FROM table1 t1 JOIN table2 t2 ON t1.id = t2.id
WHERE t3.fk = t1.id)
WHERE EXISTS (SELECT 1 FROM table1 t1 JOIN table2 t2 ON t1.id = t2.id WHERE t3.fk = t1.id);
SELECT * FROM table3;
【问题讨论】:
-
绝对是的,它递归运行。在更新前用子选择改变它
-
你能举一些例子来说明如何改变它吗?
标签: sql oracle correlated-subquery