在您的情况下,子查询的表 orders1 肯定有一个主键
(order_id) 和表order_item1 有对应的外键order_id。
因此,Oracle 将表 order_item1 转换为 键保留表,并且能够在外部 delete 语句中从该表中删除。
key保留表的概念在This tahiti documentation link有进一步的解释。
如果你想知道什么被删除了,你可以这样
这些是在您的子查询中连接的表:
create table tq84_orders1 (
id number primary key,
col_1 varchar2(10),
col_2 date
);
create table tq84_order_item1 (
order_id references tq84_orders1,
col_3 varchar2(10),
col_4 date
);
此视图模拟子查询:
create view tq84_orders_v as (
select *
from
tq84_orders1 o,
tq84_order_item1 i
where
o.id = i.order_id
);
此查询(在 user_updateable_columns 上)现在查找哪些列实际被删除(或可以删除):
select
table_name,
column_name,
--updatable,
--insertable,
deletable
from
user_updatable_columns
where
table_name = 'TQ84_ORDERS_V';
结果表明ORDER_ID、COL_3和COL_4这三列实际上可以删除,它们都源于TQ84_ORDER_ITEM1。
TABLE_NAME COLUMN_NAME DEL
------------------------------ ------------------------------ ---
TQ84_ORDERS_V ID NO
TQ84_ORDERS_V COL_1 NO
TQ84_ORDERS_V COL_2 NO
TQ84_ORDERS_V ORDER_ID YES
TQ84_ORDERS_V COL_3 YES
TQ84_ORDERS_V COL_4 YES