我之前建数据库时不太刻意去设置某一字段的内容唯一,总觉得应用端肯定会考量,事实上大部分应用端的确会卡这个问题,但当两个应用端同时上传或是其他问题时,总之,就是出现了重复数据,如果数据也就一两条的话,倒可以一条条删除,但是多了的话,就想着怎么样用语句迅速删除重复数据,这里就需要用到group by的功能了 。
菜鸟教程上group by用法说明:GROUP BY 语句根据一个或多个列对结果集进行分组。在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。说白了,就是把你现有的数据分类,有重复的都算一类,我们以下面的例子来说明具体用法:
原数据库:
先用group by 练习一下
单列练习:name那个字段就只剩两行 DD和ff了 ,也就是把name那一栏重复的名字去重了。
多列练习:group by name,age 相当于name和age同时相同的为一组,所以尽管id 1和3 的name一致,它也会认为不一样。
以上只是说明group by的用法,下面去重,我们以去name的重复为例
1. 获取分组中各组的最大ID max(id),如果是需要保留最先一笔的话,就用最小ID min(id)。
从上图看,id 2和4就是我们需要保留的行,需要删除其他的 ,这里用到NOT IN 。
2. 获取需要删除的那几行 id。
3-error. 删除第2步找到的那几行id,直接删除会报错 :意思就是你不能对同一个表格既选择又更新 ,所以需要创建一个临时表作为缓存。
3-OK: 建立临时表。
4. follow 第二步 ,获取需要删除的id
5. 可以删除啦
让我们再看一下那个表,搞定了,多组的以此类推 。小伙伴们可以自己尝试看看。
这篇文章只能算半原创,我是看了网上很多写法,最终选择了这一种我可以理解的,另外加上了group by的说明,其实以前也看过用法说明,但刚学的时候并没用到,所以只是跟着例子练习了一下,导致很久时间过去就又忘记了,知识最终都归于应用,只有到自己用到了才会发现,哦,原来是这样子用的呀,所以特别整理出来一份留下记录 。有的小伙伴可能觉得我比较懒,都没有把指令单独贴出来,但我觉得,自己尝试key in看看,会更能加深印象的哈 。