??? 相信很多人在查詢數(shù)據(jù)庫時都會碰到檢索某表中不重復(fù)記錄的時候,提到檢索不重復(fù)記錄,馬上想到的肯定是Distinct或者Group By分組,
小弟在初次使用的時候碰到了一些麻煩,這里拿出來與大家分享,希望對更多的朋友有所幫助!
??? 先看看數(shù)據(jù)庫表結(jié)構(gòu):
??? ??? 表名: TEST? 字段: Id,A,B,C,D
??? ??? 其中B字段包含重復(fù)值;
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語句檢索出不含重復(fù)記錄的數(shù)據(jù):?使用Distinct關(guān)鍵字
??? ? Distinct關(guān)鍵字主要用來在SELECT查詢記錄中根據(jù)某指定字段的值去除重復(fù)記錄
??? ?
SELECT DISTINCT [字段名] FROM [表名] WHERE [檢索條件字句]??? 所以用這樣一句SQL就可以去掉重復(fù)項了:
??? ?? ?
SELECT?DISTINCT?(B)?FROM?TEST
???
但是:
??? ? 這里有一個非常非常需要注意的地方:
??? ? SELECT DISTINCT [字段名]后面不能再跟其他的字段,否則檢索出來的記錄仍然會含有重復(fù)項;
????? 錯誤寫法:
??? ??? ???
SELECT DISTINCT [字段名] ,[其他字段名] FROM [表名] WHERE [檢索條件字句]???
??? 實際上,我們上面SQL語句結(jié)果集里就只有B字段;(一般情況下,這種結(jié)果應(yīng)該是很難滿足需求的)
???
如果我們的記錄集里還需要有其他字段值,那怎么辦呢?
實際上,我們完全可以用另一種辦法來解決問題;只是需要用到子查詢而已!
使用GROUP BY 分組
??? 有一點需要注意:
??? ??
使用帶有GROUP BY字句的查詢語句時,在SELECT列表指定的列要么是GROUP BY 指定的列,要么包含聚合組函數(shù)??? 所以用這樣一句SQL就可以去掉重復(fù)項了:
SELECT?*?FROM?TEST?WHERE?id?in?(SELECT?MIN(id)?FROM?TEST?GROUP?BY?B)
??? 這樣就得到我們想要的結(jié)果集了:
???
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 |
??? ??
??? ??