我有一个如下所示的数据库:
| i | a | b |
| 1 | 5 | 8 |
| 2 | 3 | 3 |
| 3 | 3 | 6 |
| 4 | 5 | 8 |
| 5 | 1 | 1 |
| 6 | 3 | 3 |
其中i
是ID,a
和b
是另外两个字段。如上所示,ID 2和ID 6都有a = 3
和b = 3
。 ID 1和ID 4也是如此,a
为5,b
为8。即使ID号不同,我仍然认为这些行是重复的,并且除了一个之外的所有行都要删除。无论哪一个都没关系,并且不需要改变ID号以弥补差距(但我并不反对)。
我很高兴看到一个查询,将上面的例子改为:
| i | a | b | | i | a | b |
| 3 | 3 | 6 | | 1 | 5 | 8 |
| 4 | 5 | 8 | or | 2 | 3 | 3 |
| 5 | 1 | 1 | | 3 | 3 | 6 |
| 6 | 3 | 3 | | 5 | 1 | 1 |
请不要犹豫,要求提供更多细节,并提前致谢!
答案 0 :(得分:3)
delete from your_table
where i not in
(
select * from
(
select min(i)
from your_table
group by a, b
) x
)
MySQL无法从正在选择的表中删除。这就是我使用select * from () x
答案 1 :(得分:2)
首先。清理完表后,在a和b列上放置一个Alternate Key索引,以确保没有更多的重复记录添加到表中...但是,如果说,删除最后输入的重复项,则需要< / p>
Delete TableName
From Tablename t
Where id <> (Select Min(id) From TableName
Where a = t.a and b = t.b)
要删除除最后输入的所有输入之外的所有输入,请将最小值更改为最大值
答案 2 :(得分:1)
我喜欢这种方法,因为它提供了几种方案的解决方案(使用pk与否,留下一个条目等):
http://www.4guysfromrolla.com/webtech/sqlguru/q051200-2.shtml