我要刪除所有記錄,其中從表中的字段名稱和AentryId = BentryId
表B.幫助與Oracle查詢
如果我刪除從表A和同時相匹配的className = 10010 ENTRYID 12同樣的ID也應該從表B中刪除。
表A:
AentryId className
12 10010
13 10011
14 10010
15 10011
表B:
BentryId name
12 xyz
13 abc
14 aaa
我要刪除所有記錄,其中從表中的字段名稱和AentryId = BentryId
表B.幫助與Oracle查詢
如果我刪除從表A和同時相匹配的className = 10010 ENTRYID 12同樣的ID也應該從表B中刪除。
表A:
AentryId className
12 10010
13 10011
14 10010
15 10011
表B:
BentryId name
12 xyz
13 abc
14 aaa
要做到這一點,最簡單的方式是通過與CASCADE定義的外鍵DELETE:
alter table B
add constraint b_a_fk foreign key (BentryId)
references A (AentryId)
on delete cascade
/
如果你從A的所有相關記錄刪除行在B中自動刪除。
當然,強制執行外鍵意味着您不能在B中創建任何行,但BentryId不會引用A中先前存在的AentryId。這通常是理想的事情,但不是每個數據模型都強制執行關係完整性。
編輯
刪除約束實在簡單得不能再簡單...
alter table B
drop constraint b_a_fk
/
下面可能是最終的查詢您正在尋找
delete form TableA where class="10010" and AentryId in (select BentryId from tableB)
級聯刪除是讓你的選項之一刪除孩子的數據並形成主表
否則你可以編寫查詢像下面
declare @T table (id int)
insert into @T
select AentryId form TableA where class="10010" and AentryId in (select BentryId from tableB)
delete form TableA where AentryId in (select id from @T)
delete form TableB where BentryId in (select id from @T)
這確實滿足了要求:需要從表B中刪除也是如此。 – APC 2010-04-21 10:12:33
感謝您的查詢。但它是從TableA刪除行,而不是從TableB ... – 2010-04-21 11:22:09
查詢被修改希望這會對你有用 – 2010-04-21 12:58:01
我已經改變了我的表,如你所說。但是,現在我想刪除約束,出於某種原因...如何做到這一點? 您的迅速行動將受到高度讚賞。 – 2010-04-21 12:25:48