MySQL查询重复记录方法以及简单理解

MySQL查询重复记录方法其实很简单。知道查询重复记录的方法后,自然要了解如何删除重复记录的方法。做下笔记记录下各个操作SQL语句、简单理解和使用过程中遇到的问题。

查询重复记录

SQL语句如下:


select * from table where tableId in (select tableId from table group by tableId having count(tableId) > 1)

原理:用哪些系列作为重复的标准,当这些列重复的个数大于1的情况下,判断此行记录为重复的。

order by 与having区别:

order by:查询的结果进行排序。其后跟上需要排序的字段,默认为asc。也可以进行多个字段的排序。

having:用在聚合函数中。比如通过group by进行分组。针对分组的情况进行筛选。

删除重复记录

SQL语句如下:


delete from table where tableId in (select * from (select tableId from table group by tableId having count(tableId) > 1) t1) and rowId not in ( select * from ( select min(rowId) from table group by tableId having count(tableId ) > 1) t2);

注意

1、table 表示表名称 。tableId 表示重复的列。 rowId 表示表的自增ID,如果没有这一列,很难删除重复的记录。

2、删除的SQL语句使用了临时表。如果不使用临时表,就会报如下错误。

You can’t specify target table ‘表名称’ for update in FROM clause。

原因:MySQL删除动作不能带有本表的查询动作。意思是你删除table表的东西不能以table表的信息为条件,所以这个语句会报错,执行不了。只要通过创建临时表作为查询条件。

 

MySQL查询重复记录方法以及简单理解》上有3条评论

发表评论

电子邮件地址不会被公开。