my sql에서 자신의 테이블을 업데이트 혹은 삭제를 시도학 경우
대부분의 사이트에서 서브쿼리를 한번더 감싼 후 별칭(alias)을 지정하라고 하지만,
ex) UPDATE tbl SET col = ( SELECT ... FROM (SELECT.... FROM) AS x);
5.7버전에서는 이방법만으로는 해결이 안된다.
그럴 경우 SET optimizer_switch = 'derived_merge=off';
를 쓸 경우 해결됨.
===>a_table 에서 useYn이 W인것만 date를 오늘날짜로 업데이트 하는 예제.
ex1)
SET optimizer_switch = 'derived_merge=off';
update a_table set date =now() where id in (select * from (select id from a_table where useYn = 'W' ) aa ) ;
하지만 dbtool이 아닌 mybatis나 기타 웹프로그래밍에서 저 옵션을 넣는것은 부적함 하므로,
조인을 이용하여 해결하기를 추천함
ex2)
update a_table as ori
inner join a_table as tmp
on ori.id = tmp.id and tmp.useYn = 'W'
set ori.date=now();
'개발이슈 > MySQL' 카테고리의 다른 글
IntelliJ 에서 sql query 를 복사 붙여넣기 포맷 유지하는 방법 (0) | 2023.12.22 |
---|