2011-02-13 2 views
1

나는 이것이 간단한 구문 문제라는 것을 알고있다. 하위 쿼리에서 모든 사용자를 삭제하려고 :MySQL : IN에서 삭제

delete from users 
where id IN (

select u.id 
from users u 
where not exists (select * from stickies i where i.user_id = u.id) 
group by u.email 
having count(*) > 1 

) 

이 오류를 얻기 :

error : You can't specify target table 'users' for update in FROM clause 

하위 쿼리는 미세 (사용자 ID의 수익률 목록)를 사용할 수 있습니다.

답변

3
DELETE u.* 
FROM users u JOIN (
    SELECT u.id 
    FROM users u LEFT JOIN stickies i ON i.user_id = u.id 
    WHERE i.user_id IS NULL 
    GROUP BY u.email 
    HAVING COUNT(*) > 1 
) r ON r.id = r.id 

참고 : 내부 쿼리에서는 전자 메일로 그룹화하지만 사용자 ID를 선택합니다. 이것은 비 결정적인 결과를 돌려 줄 가능성이 있습니다.

+0

흠. 방해. http://stackoverflow.com/questions/4985183/mysql-find-duplicate-users-where-count-1 – jmccartie

+0

@jmccartie 죄송합니다, 나는 uid를 철자가 잘못 입력했습니다 –

+0

도와 주셔서 감사합니다! – jmccartie