SELECT (pod)zapytania zwracają wyniki zestawy . Musisz więc użyć IN , a nie = w swoim WHERE klauzula.
Dodatkowo, jak pokazano w ta odpowiedź
nie można modyfikować tej samej tabeli z podzapytania w ramach tego samego zapytania. Możesz jednak wybrać SELECT następnie DELETE w oddzielnych zapytaniach lub zagnieździć inne podzapytanie i aliasować wewnętrzny wynik podzapytania (choć wygląda to dość dziwacznie):
DELETE FROM posts WHERE id IN (
SELECT * FROM (
SELECT id FROM posts GROUP BY id HAVING ( COUNT(id) > 1 )
) AS p
)
Lub użyj złączeń zgodnie z sugestią Mchla .