SELECT les (sous-)requêtes renvoient des ensembles de résultats . Vous devez donc utiliser IN , pas = dans votre WHERE clause.
De plus, comme indiqué dans cette réponse
vous ne pouvez pas modifier la même table à partir d'une sous-requête dans la même requête. Cependant, vous pouvez soit SELECT puis DELETE dans des requêtes séparées, ou imbriquez une autre sous-requête et aliasez le résultat de la sous-requête interne (cela semble plutôt piraté, cependant) :
DELETE FROM posts WHERE id IN (
SELECT * FROM (
SELECT id FROM posts GROUP BY id HAVING ( COUNT(id) > 1 )
) AS p
)
Ou utilisez les jointures comme suggéré par Mchl .