Удалить дублированные строки mysql без первичного ключа

Привет, у меня есть таблица mysql без первичного ключа, и мне нужно удалить дублированные строки. как я могу это сделать?

user_id category_id
1            2
1            3
1            4
1            2
2            2
2            3
2            2

Ответ 1

 CREATE TABLE temp SELECT DISTINCT * FROM tablename;
 ALTER TABLE tablename RENAME junk;
 ALTER TABLE temp RENAME tablename;

Ответ 2

Поскольку вы не можете отличить 2 одинаковых строки, вы не можете удалить только один из них. То, как вы должны думать об этом, выглядит следующим образом:

insert into new_better_table
select user_id, category_id from old_table group by user_id, category_id

Ответ 3

Можно использовать dirty флаг со значением по умолчанию 1 и копировать только отдельные записи с флагом, установленным в 0, а затем просто удалить все грязные записи. Таким образом, вам не нужен другой стол.

Предполагая, что вы уже создали dirty флаг со значением по умолчанию 1:

insert into mytable
select fld1,fld2,fldN,0 as dirty
from mytable
group by duplicate_field

Тогда вы можете просто удалить грязные записи:

delete from mytable where dirty = 1

Не забудьте убрать грязный флаг. Вы сделали