SQL查詢去掉重複資料
本文主要總結資料庫去掉重複資料的方法
去掉重複資料的方法:
第一種: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 (較複雜)
本文主要總結資料庫去掉重複資料的方法
去掉重複資料的方法:
第一種: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 (較複雜)