개발이슈/MySQL

MySQL 5.7.x 대의 1093 ERROR 오류

kalkin 2019. 5. 2. 14:35

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();