2011-02-13 4 views
1

Je sais que c'est un problème de syntaxe simple. Essayer de supprimer tous les utilisateurs d'un sous-requête:MySQL: supprimer de 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 

) 

Obtenir cette erreur:

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

La sous-requête fonctionne très bien (liste des retours d'identité d'utilisateurs de).

Répondre

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 

Remarque: dans la requête interne, vous effectuez un regroupement par courrier électronique, mais en sélectionnant un ID utilisateur. cela peut renvoyer des résultats non déterministes.

+0

Hmmm. inquiétant. Vous avez cette requête d'ici: http://stackoverflow.com/questions/4985183/mysql-find-duplicate-users-where-item-count-1 – jmccartie

+0

@jmccartie Désolé, j'ai mal orthographié 'uid' –

+0

Merci pour votre aide! – jmccartie