我正在尝试从 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 的错误:缺少 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;
还有其他方法可以轻松删除这些数据吗?