Java教程

SQL:删除重复行,并保留一行

本文主要是介绍SQL:删除重复行,并保留一行,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

如下图所示,目的是删除红框中出现的行

可以使用关联子查询的方法来实现:

DELETE FROM deletetest t1
WHERE id <> ( SELECT MIN(t2.id)
				FROM deletetest t2
				WHERE t1.name = t2.name
				AND t1.price = t2.price);

得到的结果:

原理:

通过关联子查询找出 name 和 price 都相同的行,取其中最小的 id,然后从原表中删除 id 不等于上述 id 的行。

苹果和香蕉没有重复行,而判断条件是不等号,所以不会被删除。而橘子有 3 行,其中最小的id是2,所以 id = 3 和 4 的行会被删除。

DELETE FROM 表名 AS t1 
WHERE t1.唯一键 <> ( SELECT MIN( t2.唯一键 )
						FROM 表名 AS t2
						WHERE t1.列1 = t2.列1
						AND t1.列2 = t2.列2);

如果想保留id最大的行,只需要把 MIN 改成 MAX 即可,如果需要去重的列只有一个或大于两个,则通过修改 AND 之后的部分即可实现同样的目标。

这篇关于SQL:删除重复行,并保留一行的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!