当前访问本站: 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 阅读(1645) 评论(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 就搞定了.

当你遇到这种情况的时候需要把 重复的删除掉 怎么办?
要脚本的来找我.  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: