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