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

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

SQL:删除重复行,并保留一行_第1张图片

使用集合运算的方法来实现:

DELETE FROM deletetest 
WHERE id NOT IN ( SELECT MIN(id)
					FROM deletetest 
					GROUP BY name, price);

思路:

找出每个 name,price 组合中的最小 id,然后删除其补集。

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

使用关联子查询时思路是相同的,但在性能上有劣势,而且个人认为可读性要弱于上面使用集合运算的方法。

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

这里的 <> 换成 NOT IN 应该也是可以的。

得到的结果:

SQL:删除重复行,并保留一行_第2张图片

你可能感兴趣的:(SQL,sql)