MySQL数据库中怎么查找删除重复行
这篇文章给大家介绍MySQL数据库中怎么查找删除重复行,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
当你对b字段排序(分组),相同值的c被分到不同的组,因此不能用COUNT(DISTINCT c)来计算大小。COUNT()之类的内部函数只作用于同一个分组,对于不同分组的行就无能为力了。类似,如果排序的是c字段,相同值的b也会分到不同的组,无论如何是不能达到我们的目的的。
几种正确的方法
也许最简单的方法是分别对某个字段查找重复行,然后用UNION拼在一起,像这样:
selectbasvalue,count(*)ascnt,'b'aswhat_colfroma_b_cgroupbybhavingcount(*)>1unionselectcasvalue,count(*)ascnt,'c'aswhat_colfroma_b_cgroupbychavingcount(*)>1;+-------+-----+----------+|value|cnt|what_col|+-------+-----+----------+|1|3|b||2|3|b||3|3|b||1|3|c||2|3|c||3|3|c|+-------+-----+----------+
输出what_col字段为了提示重复的是哪个字段。另一个办法是使用嵌套查询:
selecta,b,cfroma_b_cwherebin(selectbfroma_b_cgroupbybhavingcount(*)>1)orcin(selectcfroma_b_cgroupbychavingcount(*)>1);+----+------+------+|a|b|c|+----+------+------+|7|1|1||8|1|2||9|1|3||10|2|1||11|2|2||12|2|3||13|3|1||14|3|2||15|3|3|+----+------+------+
这种方法的效率要比使用UNION低许多,并且显示每一重复的行,而不是重复的字段值。还有一种方法,将自己跟group的嵌套查询结果联表查询。写法比较复杂,但对于复杂的数据或者对效率有较高要求的情况,是很有必要的。
selecta,a_b_c.b,a_b_c.cfroma_b_cleftouterjoin(selectbfroma_b_cgroupbybhavingcount(*)>1)asbona_b_c.b=b.bleftouterjoin(selectcfroma_b_cgroupbychavingcount(*)>1)ascona_b_c.c=c.cwhereb.bisnotnullorc.cisnotnull
关于MySQL数据库中怎么查找删除重复行就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。