首页 > 解决方案 > 通过删除重复项添加唯一约束

问题描述

我的 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 的行。

我被困在如何编写删除查询上。我不知道如何表达这种约束。

标签: mysqlalgorithmsql-delete

解决方案


删除前备份您的数据库:

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);

推荐阅读