单个查询更新所有子表中的标志



我想根据主表中的主键id更新所有子表中的标志。我想在单个查询中做到这一点,我怎么能做到呢?

Oracle不支持多表更新语句。如果你想要一个单一的语句,那么使用PL/SQL封装多个SQL单表更新语句:

DECLARE
v_id MAIN_TABLE.ID%TYPE := 1;
BEGIN
UPDATE child_table1
SET    flag = 1
WHERE  id = v_id;
UPDATE child_table2
SET    flag = 1
WHERE  id = v_id;
UPDATE child_table2
SET    flag = 1
WHERE  id = v_id;
END;
/
UPDATE main
JOIN slave1 USING (id)
JOIN slave2 USING (id)
...
SET slave1.flag = 1,
slave2.flag = 1,
...
WHERE main.id IN ( {ids list} )
...

使用子查询的内部连接可能会有帮助例子:

更新学生SET flag = trueWHERE id in (SELECT student)来自学生的id内连接类在学生。classId = classes.id

);