检索数据库表中的不重复记录

相信很多人在查询数据库时都会碰到检索某表中不重复记录的时候,提到检索不重复记录,马上想到的肯定是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


      

      





<script type="text/javascript"> // </script>

Feedback

# re: 检索数据库表中的不重复记录  回复  更多评论   

2007-10-31 18:37 by 叶子
'SELECT * FROM TEST WHERE id in (SELECT MIN(id) FROM TEST GROUP BY B)'

用in 查询将不会使用索引,效率会降低,如果是100W级的数据,建议把MIN(id)抽到临时表,在join 就搞定了.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值