我試圖從DEV數據庫中清除一些不良數據(每個人都有能力爲自我測試插入數據)並通過外鍵約束添加RI。這些表格是爲FKs設置的,但是,數據不是。Oracle刪除數據,這將違反將被添加的外鍵
是否有一個相對簡單的方法來刪除(tobe)子表中的數據,這將違反組合鍵?
CREATE TABLE parentTable
(key1 VARCHAR2(1) NOT NULL
, key2 VARCHAR2(1) NOT NULL
);
CREATE TABLE childTable
(key1 VARCHAR2(1) NOT NULL
, key2 VARCHAR2(1) NOT NULL
, key3 VARCHAR2(1) NOT NULL
);
ALTER TABLE parentTable ADD CONSTRAINT pk_parentTable primary key(key1,key2);
ALTER TABLE childTable ADD CONSTRAINT pk_childTable primary key(key1,key2,key3);
insert into parentTable values('0','A');
insert into parentTable values('0','B');
insert into parentTable values('1','C');
insert into childTable values('0','A','X');
insert into childTable values('0','B','Y');
insert into childTable values('1','C','X');
insert into childTable values('0','C','X'); -- bad data
我一直用來識別不良數據的查詢如下。
select distinct key1, key2 from childTable
minus
select distinct key1, key2 from parentTable;
我該如何把這個結果集從子表中刪除。按照邏輯,我試圖使用下面的查詢,但它給出了一個ORA-00928的錯誤:缺少SELECT。
with x as(
select distinct key1, key2 from childTable
minus
select distinct key1, key2 from parentTable
)
delete from childtable where key1 = x.key1 AND key2 = x.key2;
有沒有另一種方法可以輕鬆刪除這些數據?