當(dāng)前訪問本站: hits

          yjhmily

          堅(jiān)持走自己的路……

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            100 Posts :: 8 Stories :: 353 Comments :: 0 Trackbacks
          ??? 相信很多人在查詢數(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ù)值;

          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


          ??? ??

          ??? ??





          posted on 2006-12-15 11:24 kangxm 閱讀(1694) 評(píng)論(1)  編輯  收藏 所屬分類: SQL

          Feedback

          # re: 檢索數(shù)據(jù)庫表中的不重復(fù)記錄 2007-10-31 18:37 葉子
          'SELECT * FROM TEST WHERE id in (SELECT MIN(id) FROM TEST GROUP BY B)'

          用in 查詢將不會(huì)使用索引,效率會(huì)降低,如果是100W級(jí)的數(shù)據(jù),建議把MIN(id)抽到臨時(shí)表,在join 就搞定了.

          當(dāng)你遇到這種情況的時(shí)候需要把 重復(fù)的刪除掉 怎么辦?
          要腳本的來找我.  回復(fù)  更多評(píng)論
            


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 汽车| 阿勒泰市| 安康市| 光泽县| 枣强县| 南皮县| 丹凤县| 怀集县| 密山市| 岳普湖县| 恩平市| 蓬安县| 永吉县| 盐边县| 昭苏县| 临汾市| 静安区| 慈溪市| 大英县| 大渡口区| 马关县| 凭祥市| 大冶市| 泰顺县| 余姚市| 莎车县| 古丈县| 定南县| 新郑市| 库尔勒市| 台山市| 呼玛县| 洪雅县| 哈尔滨市| 双城市| 电白县| 玉树县| 漳平市| 成都市| 布拖县| 南靖县|