??? 相信很多人在查詢數據庫時都會碰到檢索某表中不重復記錄的時候,提到檢索不重復記錄,馬上想到的肯定是Distinct或者Group By分組,
小弟在初次使用的時候碰到了一些麻煩,這里拿出來與大家分享,希望對更多的朋友有所幫助!
??? 先看看數據庫表結構:
??? ??? 表名: TEST? 字段: Id,A,B,C,D
??? ??? 其中B字段包含重復值;
???
??
?
???
下面我們來看看用什么樣的SQL語句檢索出不含重復記錄的數據:
?使用Distinct關鍵字
??? ? Distinct關鍵字主要用來在SELECT查詢記錄中根據某指定字段的值去除重復記錄
??? ?SELECT DISTINCT [字段名] FROM [表名] WHERE [檢索條件字句]
??? 所以用這樣一句SQL就可以去掉重復項了:
??? ?? ?
??? 但是:
??? ? 這里有一個非常非常需要注意的地方:
??? ? SELECT DISTINCT [字段名]后面不能再跟其他的字段,否則檢索出來的記錄仍然會含有重復項;
????? 錯誤寫法:
??? ??? ??? SELECT DISTINCT [字段名] ,[其他字段名] FROM [表名] WHERE [檢索條件字句]
???
??? 實際上,我們上面SQL語句結果集里就只有B字段;(一般情況下,這種結果應該是很難滿足需求的)
??? 如果我們的記錄集里還需要有其他字段值,那怎么辦呢?
實際上,我們完全可以用另一種辦法來解決問題;只是需要用到子查詢而已!
使用GROUP BY 分組
??? 有一點需要注意:
??? ?? 使用帶有GROUP BY字句的查詢語句時,在SELECT列表指定的列要么是GROUP BY 指定的列,要么包含聚合組函數
??? 所以用這樣一句SQL就可以去掉重復項了:
??? 這樣就得到我們想要的結果集了:
???
??? ??
??? ??
小弟在初次使用的時候碰到了一些麻煩,這里拿出來與大家分享,希望對更多的朋友有所幫助!
??? 先看看數據庫表結構:
??? ??? 表名: TEST? 字段: Id,A,B,C,D
??? ??? 其中B字段包含重復值;
Id | A | B | C | D |
1 | 11 | a | 34 | bvb |
2 | 22 | a | 35 | fgfg |
3 | 33 | d | ht | sdf |
4 | 44 | a | 345 | de |
5 | 55 | c | sfsf | sscv |
6 | 66 | b | rt | fg |
???
??
?
???
下面我們來看看用什么樣的SQL語句檢索出不含重復記錄的數據:
?使用Distinct關鍵字
??? ? Distinct關鍵字主要用來在SELECT查詢記錄中根據某指定字段的值去除重復記錄
??? ?SELECT DISTINCT [字段名] FROM [表名] WHERE [檢索條件字句]
??? 所以用這樣一句SQL就可以去掉重復項了:
??? ?? ?
SELECT?DISTINCT?(B)?FROM?TEST
??? 但是:
??? ? 這里有一個非常非常需要注意的地方:
??? ? SELECT DISTINCT [字段名]后面不能再跟其他的字段,否則檢索出來的記錄仍然會含有重復項;
????? 錯誤寫法:
??? ??? ??? SELECT DISTINCT [字段名] ,[其他字段名] FROM [表名] WHERE [檢索條件字句]
???
??? 實際上,我們上面SQL語句結果集里就只有B字段;(一般情況下,這種結果應該是很難滿足需求的)
??? 如果我們的記錄集里還需要有其他字段值,那怎么辦呢?
實際上,我們完全可以用另一種辦法來解決問題;只是需要用到子查詢而已!
使用GROUP BY 分組
??? 有一點需要注意:
??? ?? 使用帶有GROUP BY字句的查詢語句時,在SELECT列表指定的列要么是GROUP BY 指定的列,要么包含聚合組函數
??? 所以用這樣一句SQL就可以去掉重復項了:
SELECT?*?FROM?TEST?WHERE?id?in?(SELECT?MIN(id)?FROM?TEST?GROUP?BY?B)
??? 這樣就得到我們想要的結果集了:
???
Id | A | B | C | D |
1 | 11 | a | 34 | bvb |
3 | 33 | d | ht | sdf |
5 | 55 | c | sfsf | sscv |
6 | 66 | b | rt | fg |
??? ??
??? ??