2011-04-28 4 views
21

왜이 쿼리가 작동하지 않습니까?삭제 - 대상 테이블을 지정할 수 없습니까?

DELETE FROM recent_edits 
WHERE trackid NOT IN 
    (SELECT DISTINCT history.trackid 
    FROM history JOIN recent_edits ON history.trackid=recent_edits.trackid 
    GROUP BY recent_edits.trackid) 

나는이 메시지가 : "recent_edits"당신은 목표 테이블을 지정할 수 없습니다 "업데이트 FROM 절

답변

62

에 한번이 방법

DELETE FROM recent_edits 
WHERE trackid NOT IN 
    (select * from (SELECT DISTINCT history.trackid 
    FROM history JOIN recent_edits ON history.trackid=recent_edits.trackid 
    GROUP BY recent_edits.trackid) as t); 
+1

이 트릭은 아우 구스토가 말한 것을 수행합니다. Ciao;) –

+0

@Augusto : 다행이라고 생각합니다. 당신의 대답도 옳았습니다. :) –

+1

@Augusto, http://stackoverflow.com/a/8333417/632951 참조 – Pacerier

6

당신은 할 수 없습니다 후 공정에서 삭제를 위해 잠긴 테이블 .Nicola 주로서 해킹 select * from (query)을 사용하면 직접 액세스 대신 임시 테이블이 생성됩니다.

편집 - 테이블에 ID를 지정해야합니다. 중첩되어 있으며 모든 테이블에 대해 고유 ID가 필요하므로 사용하십시오.

관련 문제