이전엔 조인 사용법 과 카테시안 곱 을 활용해보았습니다.
이번 시간엔 SQL로 업데이트를 할 때 두개 테이블을 한번에 업데이트할 수 있습니다.
복잡한 쿼리문을 통해 입맛대로 수정하기 좋은 방법이죠.
특히나 저는 참조 SELECT 한 값을 수정하려 하니 이런 에러를 주더라구요.
UPDATE table_a a, table_b b
SET b.column1 = '2030-01-01 00:00:00'
WHERE a.column2 = b.column2
AND a.column3 = 'test';
UPDATE 를 하더라도 이런 식으로 조인을 할 수 있습니다.
저는 이 쿼리를 볼 때마다 경이롭습니다. 저희 팀장님이 알려주셨어요.
쿼리를 감싸는
UPDATE table_b b SET
b.column1 = '2030-01-01 00:00:00'
WHERE (1=1)
AND b.column2 IN (
SELECT DISTINCT a.column2 FROM table_a a
LEFT JOIN table_b b ON a.column2 = b.column2
WHERE a.column3 = 'test'
) ;
이렇게 작성하여 쿼리를 실행하면 에러가 발생합니다.
이유는 MySQL 의 특징으로 데이터 추가 및 갱신할 경우
동일한 테이블로 서브쿼리를 사용할 수 없도록 되어있기 때문입니다.
방법은 임시테이블로 만들면 되는데요, 한번 더 감싸면 됩니다.
UPDATE table_b b SET
b.column1 = '2030-01-01 00:00:00'
WHERE (1=1)
AND b.column2 IN (SELECT * FROM (
SELECT DISTINCT a.column2 FROM table_a a
LEFT JOIN table_b b ON a.column2 = b.column2
WHERE a.column3 = 'test'
) as a ) ;
SELECT 를 통해 한번 더 감싸서 실행하면
정상적으로 적용이 되는 모습을 볼 수 있습니다.
그 팀장님 누군진 모르겠지만 쿼리를 많이 배울 수 있을 거 같네요