當前訪問本站: hits

          yjhmily

          堅持走自己的路……

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            100 Posts :: 8 Stories :: 353 Comments :: 0 Trackbacks
          ??? 相信很多人在查詢數據庫時都會碰到檢索某表中不重復記錄的時候,提到檢索不重復記錄,馬上想到的肯定是Distinct或者Group By分組,
          小弟在初次使用的時候碰到了一些麻煩,這里拿出來與大家分享,希望對更多的朋友有所幫助!

          ??? 先看看數據庫表結構:
          ??? ??? 表名: 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


          ??? ??

          ??? ??





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

          Feedback

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

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

          當你遇到這種情況的時候需要把 重復的刪除掉 怎么辦?
          要腳本的來找我.  回復  更多評論
            

          主站蜘蛛池模板: 治多县| 剑川县| 临沂市| 神池县| 崇文区| 桦川县| 张家口市| 车致| 集安市| 潢川县| 富源县| 滦南县| 胶州市| 吴旗县| 阳朔县| 湘潭市| 蒲江县| 万山特区| 加查县| 清涧县| 平南县| 四会市| 兴宁市| 宁都县| 衡水市| 巩留县| 台中县| 玛沁县| 聊城市| 文登市| 延边| 德清县| 嘉义市| 潜山县| 砚山县| 寻甸| 建瓯市| 镇雄县| 丰原市| 土默特左旗| 海原县|