如果想创建 (A, B, C) 唯一索引,而数据库中存在重复元组,例如:

ID A B C D
1 1 2 3 4
2 1 2 3 5
3 1 2 3 6
4 8 9 10 4
5 8 9 10 5
6 8 9 10 6

如果重复的元组是等价的,我们只想保留其中一条那么可以这样,用一个相关子查询将每组重复的最后一条记录保留,其余的挑出来:

1
2
3
select * from table_name where id not in (
select max(id) from table_name GROUP BY(A,B,C)
);

备份上面的数据,运行删除:

1
2
3
delete from table_name where id not in (
select max(id) from table_name GROUP BY(A,B,C)
);

结果如下:

ID A B C D
3 1 2 3 6
6 8 9 10 6