2011-01-05 2 views
5

이름에 따라 최신 버전이 아닌 레코드를 모두 삭제하려고하지만 동일한 쿼리에서 수정할 테이블에 대한 액세스를 참조 할 수없는 것 같습니다. DELETE 쿼리에서 self-refencing 해제

나는이 시도하지만, 위의 이유로 작동하지 않습니다

DELETE FROM table 
WHERE CONCAT(name, version) NOT IN (
SELECT CONCAT(name, MAX(version)) 
FROM table 
GROUP name 
) 

가 어떻게이 문제를 해결받을 수 있나요?

건배

답변

7

Wrap the inner reference in a derived table.

DELETE FROM table 
WHERE Concat(name, version) NOT IN (SELECT nv 
            FROM (SELECT Concat(name, Max(version)) 
                AS nv 
              FROM table 
              GROUP BY name) AS derived) 
+1

감사 별칭입니다 만드는, 그 링크를 볼 수 및 이전이 방법을 시도하지만 어딘가 잘못 브래킷을 떠난 있어야했다 //. – DonutReply

+0

방금 ​​알아보고 수정했습니다. – DonutReply

1
delete t1 
from table_name1 t1, table_name1 t2 
where t1.version < t2.version 
and t1.name = t2.name; 

은 필요가 여기