DEV データベースからいくつかの不良データをクリーンアップしようとしています (誰もが自己テスト用にデータを挿入できます)、外部キー制約を介して RI を追加しようとしています。テーブルは FK 用に設定されていますが、データは設定されていません。
複合キーに違反する (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: Missing 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;
このデータを簡単に削除する別の方法はありますか?