SQL Server
조인하여 DELETE FROM 하기, Transact-SQL FROM 확장을 통해 삭제
미스터몽키
2018. 1. 4. 23:19
단일 테이블의 자료를 삭제할 때 테이블내의 조건으로 삭제하는 것은 단순하게
WHERE 조건만 이용하면된다.
DELETE FROM 테이블명
WHERE 조건
그런데 TABLE1 과 TABLE2 를 조인한 조건으로 TABLE1의 자료를 삭제하는 경우는 조금 복잡하다.
예를 들어 reference 제약조건 없이 만들어진 부모(TABLE2) 자식(TABLE1) 관계의 테이블에서
부모(TABLE2) 가 없는 자식(TABLE1) 자료를 조사하여 삭제해야하는 경우가 있다.
/*** 키값이 1개일 때 ***/-- 대상 검색SELECT A.COL1 FROM TABLE1 A LEFT JOIN TABLE2 B ON A.COL1 = B.COL1WHERE B.COL1 IS NULL-- 하위 쿼리 이용하여 삭제DELETE FROM TABLE1WHERE COL1 IN(SELECT A.COL1 FROM TABLE1 A LEFT JOIN TABLE2 B ON A.COL1 = B.COL1WHERE B.COL1 IS NULL)/*** 키값이 2개 이상일 때도 가능 ****/-- 대상 검색SELECT *FROM TABLE1 ALEFT JOIN TABLE2 B ON A.COL1=B.COL1 AND A.COL2=B.COL2WHERE B.COL1 IS NULL-- Transact-SQL FROM 확장을 통해 삭제DELETE FROM AFROM TABLE1 ALEFT JOIN TABLE2 B ON A.COL1=B.COL1 AND A.COL2=B.COL2WHERE B.COL1 IS NULLcs