Как добавить в MySQL более одного столбца, который также удалит дубликаты? - PullRequest
0 голосов
/ 28 декабря 2010

Как сделать что-то вроде этого:

ALTER TABLE `people` ADD UNIQUE (`name`, `hair_color`)

, который также удалит дубликаты из таблицы people

fe У меня есть данные:

 `name` | `hair_color`
--------|--------------
 'John' | 'brown'
 'Paul' | 'brown'
 'Paul' | 'brown'
 'Paul' | 'gray'

ипосле операции я хочу, чтобы в таблице был УНИКАЛЬНЫЙ КЛЮЧ и только 2 Паулса (один с коричневым, а другой с седыми волосами).

Ответы [ 3 ]

4 голосов
/ 28 декабря 2010

MySQL имеет хороший маленький взломать для этого.Вы можете добавить к любой команде префикс IGNORE, чтобы она игнорировала ошибки и позволяла ей работать «как-то иначе»:

ALTER IGNORE TABLE `people` ADD UNIQUE (`name`, `hair_color`)
1 голос
/ 28 декабря 2010

Просто добавьте ключевое слово IGNORE, и оно избавится от дубликатов в процессе:

ALTER IGNORE TABLE `people` ADD UNIQUE (`name`, `hair_color`)
1 голос
/ 28 декабря 2010

Нет единой операции для этого. Сначала необходимо удалить дубликаты, а затем добавить уникальное ограничение

Общий подход к этому (если ваш стол не слишком большой):

CREATE TABLE people_new (name varchar(20), hair_color varchar(20))
SELECT DISTINCT name, hair_color
FROM people;

DROP TABLE people;

ALTER TABLE people_new RENAME TO people;

ALTER TABLE people ADD UNIQUE (name, hair_color);
...