我的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的行。
我坚持如何编写删除查询。我不知道如何表达这种约束。
答案 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);