gpt4 book ai didi

sql - 从 <子查询> 中删除

转载 作者:行者123 更新时间:2023-12-04 17:09:50 25 4
gpt4 key购买 nike

DELETE FROM (SELECT * FROM orders1 o,order_item1 i
WHERE i.order_id = o.order_id );

上面的查询没有提到特定的删除行。而不是我提到了一个子查询。
但是这个查询执行没有任何错误并删除 order_item1表行。

oracle服务器如何决定应该删除哪些表行?
为什么 orders1表行不能删除?

最佳答案

在您的情况下,子查询的表 orders1肯定有一个主键
( order_id ) 和表 order_item1有对应的外键order_id .

因此,Oracle 扭转了局面 order_item1 key 保存表并且能够从外部 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
);

此 View 模拟子查询:
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

关于sql - 从 <子查询> 中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21348159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com