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.COL1
       WHERE B.COL1 IS NULL
 
-- 하위 쿼리 이용하여 삭제
DELETE FROM TABLE1 
WHERE COL1 IN 
      (SELECT A.COL1 FROM TABLE1 A LEFT JOIN TABLE2 B ON A.COL1 = B.COL1
       WHERE B.COL1 IS NULL)
 
 
 
/*** 키값이 2개 이상일 때도 가능  ****/
 
-- 대상 검색
SELECT *
FROM TABLE1 A 
  LEFT JOIN TABLE2 B ON A.COL1=B.COL1 AND A.COL2=B.COL2
WHERE B.COL1 IS NULL
 
-- Transact-SQL FROM 확장을 통해 삭제 
DELETE FROM A 
FROM TABLE1 A 
  LEFT JOIN TABLE2 B ON A.COL1=B.COL1 AND A.COL2=B.COL2
WHERE B.COL1 IS NULL
 
 
cs