DELETE FROM `test2`
WHERE `id_gente` IN (
SELECT `id_gente` FROM (
SELECT `id_gente` FROM `test2`
GROUP BY `id_gente`
HAVING COUNT(*) > 1
) AS `t1`
)
AND `id` NOT IN (
SELECT `id` FROM (
SELECT `id` FROM `test2`
GROUP BY `id_gente`
HAVING COUNT(*) > 1
) AS `t2`
)
2 запроса, полностью одинаковых, один возвращает `id`, второй `id_gente`, при этом можно одним запросом достать обе колонки, вопрос в другом, как эти данные разделить, чтобы id_gente пошел в первое условие WHERE, а id во второе, где "AND `id` NOT IN".
Может как-то через переменные...
Пробовал так:
DELETE FROM `test2`
WHERE `id_gente` IN (
SELECT `id_gente` FROM (
SELECT `id_gente`,@ids := `id` FROM `test2`
GROUP BY `id_gente`
HAVING COUNT(*) > 1
) AS `t1`
)
AND `id` NOT IN (
@ids
)
Но в ответ почему-то криво удаляются, удаляются даже те, которые не должны были удалиться! Допустим абсолютно все записи с id_gente = 2 удаляются...