※ ERROR : You can't specify target table '<Table>' for update in FROM clause ※
#문제의 코드
DELETE FROM Person
WHERE Id NOT IN (
SELECT MIN(Id)
FROM Person
GROUP BY Email
);
#해결된 코드
DELETE FROM Person
WHERE Id NOT IN (
SELECT Sub.Minval FROM (
SELECT MIN(Id) AS Minval
FROM Person
GROUP BY Email
) AS Sub
);
문제 Link : Delete Duplicate Emails - LeetCode
위와 같은 코드를 작성하였을 때 이런 에러가 발생하였다. 계속해서 확인을 해 본 결과 DELETE 로 Update 를 하고있는 Person Table 과 WHERE 조건절 안에서 참조되는 Person Table 이 같은 Table 이라서 명화갛게 구분할 수 없기에 발생하는 에러인 것 같다. 이러한 에러는 Sub Query 절을 괄호로 한번 더 감싸서 각 위치에서 사용되는 Table 을 명확하게 하여 해결할 수 있다.
해결된 코드를 보면 Sub Query 에서 SELECT 되는 DATA 들을 괄호로 한번 더 묶어서 Target Table 을 명확하게 하였다. 그 결과 오류를 해결할 수 있었다.
728x90
'Data Base > SQL' 카테고리의 다른 글
SQL) 문자열 다루기_1 (LENGTH/CONCAT/SUBSTRING) (0) | 2021.09.10 |
---|---|
SQL) 순위함수(RANK, DENSE_RANK, ROW_NUMBER) (0) | 2021.09.03 |
SQL) JOIN (INNER/LEFT/RIGHT/OUTER) (1) | 2021.08.29 |
SQL) 연산자 우선순위 (0) | 2021.08.23 |
엔터티 (Entity) (0) | 2021.08.12 |
댓글