프로그램/mysql2009. 12. 3. 11:58

[에러]
You can't specify target table '테이블' for update in FROM clause

[설명]
위와 같은 에러가 나오는 경우는
서브쿼리를 수행할 시에는 서브쿼리의 FROM절과 업데이트 target 모두를 위해
같은 테이블을 사용할 수 없다.
즉, 같은 테이블을 불러와서 같은 테이블에서 업데이트(UPDATE), 삭제(DELETE)를 못한다.

소스예>
DELETE FROM 테이블1 WHERE 컬럼1 IN (SELECT A.컬럼1 
                                                           FROM 테이블1 AS A 
                                                                     LEFT JOIN 테이블2  AS B ON A.컬럼1=B.컬럼2
                                                           WHERE B.컬럼2 IS NULL
                                                           );


[해결]
서브쿼리를 한번 더 감싸준다.

소스예>
DELETE FROM 테이블1 WHERE 컬럼1 IN (SELECT *
                                                           FROM (SELECT A.컬럼1
                                                                      FROM 테이블1 AS A
                                                                                LEFT JOIN 테이블2  AS B ON A.컬럼1=B.컬럼2
                                                           WHERE B.컬럼2 IS NULL) A
                                                           );
Posted by 은둔고수