두테이블 비교후 자식 레코드가 없는데이터만 삭제방법 0 7 2,939

by 칼로토 [Oracle 에러코드] 자식레코드 삭제 [2017.07.14 13:36:36]


테이블 a와b가있습니다.  테이블 a와b의 특정컬럼값이 같은 테이블a의 row데이터를 삭제하고

싶습니다. 단, 테이블a의 값들중 자식레코드가있는 값들은 삭제를 피하고싶습니다. 

delete from a where 비교컬럼 in (select a.비교컬럼 from a, b where a.비교컬럼=b.비교컬럼);

이렇게 하면 될거같은데 테이블 a의 데이터들중 자식레코드가있는 데이터가 있고 없는데이터가있어서

중간에 삭제되다가 ora-02292 무결성 제약조건이 위배되었습니다.라고 나오네요. 

제약조건 제거안하고 자식레코드가있는 데이터들은 건너뛰고 자식레코드가 없는데이터만 지울수는

없을까요?

 

by 마농 [2017.07.14 13:52:18]
DELETE FROM a WHERE NOT EXISTS (SELECT 1 FROM b WHERE b.fk = a.pk);
DELETE FROM a WHERE pk NOT IN (SELECT fk FROM b);
DELETE FROM a WHERE pk IN (SELECT pk FROM a MINUS SELECT fk FROM b);

 


by 마농 [2017.07.14 14:38:54]

그럼 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
              )
;

 


by 칼로토 [2017.07.14 14:42:25]

답변감사합니다! 그런데 테이블 a의 데이터들은 테이블b의 데이터들이 아닌 다른 테이블 c,d의 데이터들과 pk, fk관계로 연결되어 제약되어 있습니다. ㅠ 그리고 저 세문장을 동시에 실행해야하나요? 그리고 첫문장의 1이 뭘의미하나요? 초보라ㅠ


by 마농 [2017.07.14 14:47:57]

여러가지 다양한 방법을 소개한 거구요.
Exists 구문에서 Select 절에 구색을 맞추기 위해 적은 것일 뿐. 1은 별 의미 없습니다.
 


by 마농 [2017.07.14 14:46:10]

음. 질문을 잘못 이해했었네요. 이제야 이해했네요...
b 는 조건 검색용 테이블이고, c, d 등이 자식테이블이군요.
 

DELETE FROM a
 WHERE EXISTS (SELECT 1 FROM b WHERE b.비교컬럼 = a.비교컬럼)
   AND NOT EXISTS (SELECT 1 FROM c WHERE c.fk = a.pk)
   AND NOT EXISTS (SELECT 1 FROM d WHERE d.fk = a.pk)
;

 


by 칼로토 [2017.07.14 15:02:00]

아. . . 제가 글을 너무 두서없게 썼습니다ㅠ 죄송합니다.  맞습니다. b는 조건용 c,d는 자식테이블입니다. fk와 pk는 해당 컬럼명을 써야하죠?


by 칼로토 [2017.07.14 15:10:25]

감사합니다!  해결되었습니다! 도움 감사드립니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입