通过删除重复项添加唯一约束

时间:2018-05-17 00:13:19

标签: mysql algorithm sql-delete

我的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'

我想删除id为10和21的行。

我坚持如何编写删除查询。我不知道如何表达这种约束。

1 个答案:

答案 0 :(得分:1)

删除前备份您的数据库:

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);
相关问题