Oracle中delete主子表关联查询结果时,为什么只会删除子表中的记录?

orders表为主表、order_items表为子表,它们通过order_id进行外键关联;
Oracle中为什么delete from (select * from orders o,order_items i where o.order_id=i.order_id)只删除了子表order_items中的记录?
换成delete from (select * from order_items i,orders o where i.order_id=o.order_id)也是一样的只删除了order_items中的记录

我搞了很久的oracle,第一次知道delete可以这么写。我觉得可能是主外键关联的关系,所以要删除oracle_items表。追问

我也是搞了5、6年了,测试了一下,delete只能删除单表或具有主外键关联的连接查询所构造的显式视图或匿名视图,并且只会删除该连接查询中的最下一级的子表中满足条件的记录,也就是:假如T1是主表,T2是T1的子表,而T3又是T2的子表,如果Delete这三张表的主外键连接查询,只会删除T3中的记录。

温馨提示:内容为网友见解,仅供参考
第1个回答  2016-05-17
请参考级联删除 on delete cascade
相似回答