테이블 a와b가있습니다. 테이블 a와b의 특정컬럼값이 같은 테이블a의 row데이터를 삭제하고
싶습니다. 단, 테이블a의 값들중 자식레코드가있는 값들은 삭제를 피하고싶습니다.
delete from a where 비교컬럼 in (select a.비교컬럼 from a, b where a.비교컬럼=b.비교컬럼);
이렇게 하면 될거같은데 테이블 a의 데이터들중 자식레코드가있는 데이터가 있고 없는데이터가있어서
중간에 삭제되다가 ora-02292 무결성 제약조건이 위배되었습니다.라고 나오네요.
제약조건 제거안하고 자식레코드가있는 데이터들은 건너뛰고 자식레코드가 없는데이터만 지울수는
없을까요?
그럼 c, d 모두 동일하게 다 체크조건 추가해 주시면 됩니다.
DELETE FROM a WHERE NOT EXISTS (SELECT 1 FROM b WHERE b.fk = a.pk) AND NOT EXISTS (SELECT 1 FROM c WHERE c.fk = a.pk) AND NOT EXISTS (SELECT 1 FROM d WHERE d.fk = a.pk) ; DELETE FROM a WHERE pk NOT IN (SELECT fk FROM b UNION ALL SELECT fk FROM c UNION ALL SELECT fk FROM d ) ; DELETE FROM a WHERE pk IN (SELECT pk FROM a MINUS SELECT fk FROM b MINUS SELECT fk FROM c MINUS SELECT fk FROM d ) ;