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表的信息为条件,所以这个语句会报错,执行不了。只要通过创建临时表作为查询条件。
没办法呐,老师不给放假
没办法呐,老师不给放假
没办法呐,老师不给放假