Создайте новую таблицу ИЛИ добавьте уникальный ключ, самостоятельно присоединитесь и удалите все, кроме минимального ключа
Новая таблица:
Так что вы могли бы сделать новый стол без дупле. Я полагаю, вы уже подумали об этом.
CREATE TABLE new_test (field1 INTEGER, field2 INTEGER);
INSERT INTO new_test(field1,field2) SELECT DISTINCT field1,field2 FROM test;
DROP TABLE test;
RENAME TABLE new_test test;
Если бы у вас был уникальный ключ, вы могли бы самостоятельно объединиться и идентифицировать цели, имея уникальный ключ >
, чем минимум. Если у вас не было такого ключа, вы могли бы сделать его:
Создать уникальный ключ:
ALTER TABLE t2 ADD COLUMN (pk INTEGER NOT NULL AUTO_INCREMENT, PRIMARY KEY(pk));
В любом случае, теперь вы можете самостоятельно объединиться и сохранить МИНУТУ (pk):
Самостоятельное присоединение и удаление дубликатов:
mysql> DELETE dups.* FROM t2 AS dups
INNER JOIN (
SELECT field1,field2,MIN(pk) as MPK FROM t2
GROUP BY field1,field2 HAVING COUNT(*) > 1 ) AS keep
ON keep.field1=dups.field1
AND keep.field2=dups.field2
AND keep.MPK <> dups.pk;