본문 바로가기

MySQL

JOIN 을 이용한 다중 행 UPDATE와 DELETE 사용하기

UPDATE JOIN 을 이용한 다중행 업데이트 하기 


다른 테이블을 기준으로 해서 데이블을 업데이트 할 때가 있다. 

이럴 때 조인문을 이용해서 UPDATE 하게 되는데 아래와 같이 사용하면 된다. 


UPDATE [업데이트할 테이블명2] A INNER JOIN [테이블명-2] B

ON A.[조인할 컬럼명] = B.[조인할 컬럼명]

SET A.[변경할 컬럼명] = 변경할값

( WHERE 절 )


예) UPDATE JOIN 


UPDATE Member AS A INNER JOIN Member_Data AS B

ON A.UserID= B.UserID

SET A.STATUS_CD = B.STATUS_CD

WHERE B.STATUS_CD <> '300'



DELETE FROM JOIN


다른 테이블의 값을 기초로 테이블의 값을 다중으로 삭제해야 하는 경우가 있다. 

이럴 때 위의 UPDATE JOIN 문과 비슷하게 사용하면 될 거 같으나 그렇게 되지 않느다. 


-- 아래와 하면 될 거 같다.. 그런데 안된다. 


DELETE FROM 

  [Table-A]

INNER JOIN 

  [Table-B] ON Table-A.ID = Table-B.ID 

WHERE 

  Table-B.NAME= '홍길동'


- 아래와 같이 해야 된다. 

- 지워지는 데이타는 Member Table 에 있는 데이타임. 


DELETE FROM 

  [Table-A] Using [Table-A]

INNER JOIN 

  [Table-B] ON Table-A.ID = Table-B.ID

WHERE 

  Table-B.NAME= '홍길동'


예) DELETE USING JOIN 


DELETE FROM Member USING Member

INNER JOIN Member_ERROR 

ON Member.UserID= Member_ERROR.UserID

WHERE Member_ERROR.Member_Status   = '200' ; 



  • DELETE와 FROM 절 사이에 삭제할 테이블 명시 : test1(t1)

    DELETE
     t1
    FROM test1 as t1 INNER JOIN test2 t2
    WHERE t1.id=t2.id 
    ;


  • FROM과 USING 절 사이에 삭제할 테이블 명시 : test1(t1)
    DELETE 
    FROM t1
      USING test1 as t1 INNER JOIN test2 t2
    WHERE t1.id=t2.id 
    ;


참고 : http://dev.mysql.com/doc/refman/5.0/en/delete.html

http://intomysql.blogspot.kr/2011/01/join-delete-multiple-table-delete.html

http://moonlighting.tistory.com/99