Удалить дублированные строки 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