MySQL: удалить из IN - PullRequest
       30

MySQL: удалить из IN

1 голос
/ 13 февраля 2011

Я знаю, что это простая проблема синтаксиса.Попытка удалить всех пользователей из подзапроса:

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

Подзапрос работает нормально (возвращает список идентификаторов пользователей).

1 Ответ

3 голосов
/ 13 февраля 2011
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

Примечание: во внутреннем запросе вы группируете по электронной почте, но выбираете идентификатор пользователя. это может вернуть недетерминированные результаты.

...