Добавить уникальное ограничение, удалив дубликаты - PullRequest
0 голосов
/ 17 мая 2018

Моя таблица mysql выглядит следующим образом:

CREATE TABLE "my_table" (
  "id" int(11) NOT NULL AUTO_INCREMENT,
  "content" blob NOT NULL,
  "business_id" varchar(255) NOT NULL
  PRIMARY KEY ("id")
) ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=latin1;

Эта таблица может содержать несколько строк с одинаковым "business_id".Я хочу сделать столбец business_id уникальным.Для этого я хочу удалить все строки, имеющие общий business_id, кроме последней.

Например, если у меня есть следующие строки

10  'hello' '5'
...
21  'hello' '5'
...
350 'hello' '5'

Я хочу удалить строки с идентификатором 10и 21.

Я застрял на том, как написать запрос на удаление.Я не знаю, как выразить это ограничение.

1 Ответ

0 голосов
/ 17 мая 2018

Сделайте резервную копию вашей БД перед удалением:

delete FROM my_table where  business_id in 
    (select business_id from (select business_id from my_table group by business_id having count(business_id)>1) t) 
  and business_id not in 
    (select maxid from (select max(business_id) maxid from my_table group by business_id having count(business_id)>1) t1);
...