本文主要總結數據庫去掉重復數據的方法
去掉重復數據的方法:
第一種:distinct
- 根據單個字段去重,能精確去重;
- 作用在多個字段時,只有當這幾個字段的完全相同時,才能去重;
- 關鍵字distinct只能放在SQL語句中的第一個,才會起作用
上圖舉例說明:圖中student_name 為 test的同學有兩位,不同的是班級
首先,單個字段 -》用distinct對student_name 進行篩選,單個字段查詢的話,可以看到已經將一個重復的test學生記錄去掉了
應用在多個字段時,可以看到此時兩個同名的test,都被查出來;應用在多個字段時,只有當多個字段重復才會去重
一般用來返回不重復的記錄條數,返回不重復的條數(去掉test重復的,就剩下6條)
第二種:group by + count + min 去掉重復數據
沒有加group by之前,有兩條班級名稱一樣的數據
加上group by 后,會將重復的數據去掉了
count + group +min:去掉重復數據
- 首先根據查出重復的數據
- 然后再加上id不在查詢結果里面的,去掉重復數據
SELECT * from tb_class where classname in (SELECT classname from tb_class GROUP BY classname HAVING COUNT(classname)>1)
and id NOT in (SELECT min(id) from tb_class GROUP BY classname HAVING count(classname)>1)
第三種:min、max(這種方法在第二種中已經用到了)
參考:
https://download.csdn.net/download/liangfei207/10325028
https://www.cnblogs.com/firstdream/p/7985584.html (較復雜)