當前訪問本站: 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 閱讀(1694) 評論(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 就搞定了.

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

          主站蜘蛛池模板: 边坝县| 吉林省| 沂南县| 余庆县| 岫岩| 衡山县| 图片| 河东区| 炉霍县| 密山市| 宁强县| 龙海市| 吐鲁番市| 宁阳县| 岐山县| 尼玛县| 屯门区| 保定市| 武平县| 洮南市| 罗山县| 华亭县| 隆尧县| 大洼县| 南澳县| 沂水县| 海阳市| 郓城县| 汤原县| 黑水县| 万安县| 永吉县| 南充市| 清徐县| 乐都县| 甘南县| 临洮县| 丹阳市| 深圳市| 岐山县| 图木舒克市|