Здравствуйте, уважаемые.
Возник следующий вопрос:
Есть таблица, состоящая из уникального ид и значения.
Как удалить из таблицы записи с одинаковыми значениями, встречающиеся больше х раз, в порядке убывания уникального ида?
В mysql нельзя использовать подзапросы в delete statement на ту же таблицу, откуда delete, так что либо транзакцию и 2 запроса, либо можно использовать join.
Для x = 1 с джойном как-то так:
delete t1 from foo t1 inner join foo t2 on (t2.value = t1.value and t2.id > t1.id);
В mysql нельзя использовать подзапросы в delete statement на ту же таблицу, откуда delete, так что либо транзакцию и 2 запроса, либо можно использовать join.
Для x = 1 с джойном как-то так:
delete t1 from foo t1 inner join foo t2 on (t2.value = t1.value and t2.id > t1.id);
MariaDB [test]> delete from foo where id in (select id from foo where foo = 1);
ERROR 1093 (HY000): Table 'foo' is specified twice, both as a target for 'DELETE' and as a separate source for data
Эм, я так понял, что надо удалить из дубликатов только count - limit самых старых. Иначе непонятно, причем тут "в порядке убывания".
Если все, то да, так.
set @X = 3;
delete from tbl
where id not in (
select m_id from (
select max(id) as m_id, count(val) as cnt
from tbl
group by val
having cnt > @X
) as tmp_tbl
);