度量快速开发平台-专业、快速的软件定制快开平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 622|回复: 2
打印 上一主题 下一主题

[分享] SQL查询重复数据和清除重复数据(二)

[复制链接]

348

主题

3572

帖子

9251

积分

论坛元老

Rank: 8Rank: 8

积分
9251
跳转到指定楼层
楼主
发表于 2020-4-19 23:45:46 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 万望 于 2016-5-19 23:48 编辑


过滤掉所有多余的重复记录
(
1)我们知道distinct、group by 可以过滤重复,于是就有最直观的

select   distinct   *   from   emp     或     select   name,age   from   emp   group   by   name,age

获得需要的数据,如果可以使用临时表就有解法:

select   distinct   *   into   #tmp    from   emp   

    delete   from   emp   
    insert   into   emp   select   *   from   #tmp

(
2)但是如果不可以使用临时表,那该怎么办?
我们观察到我们没办法区分数据(物理位置不一样,对 SQL Server来说没有任何区别),思路自然是想办法把数据区分出来了,既然现在的所有的列都没办法区分数据,唯一的办法就是再加个列让它区分出来,加什么列好?最佳选择是identity列:

alter   table   emp   add   chk   int   identity(1,1 )

例表:
name   age   chk     

    Tom     16     1     
    Sun      14     2     
    Tom     16     3     
    Tom     16     4

重复记录可以表示为:

select   *   from   emp where (select   count(*)   from   emp   e   where   e.name=emp.name)>1

要删除的是:

delete   from   emp

    where (select   count(*)   from   emp   e     where   e.name=emp.name   and   e.chk>=emp.chk)>1

再把添加的列删掉,出现结果。

alter   table   emp   drop   column   chk


(
3)另一个思路:
视图

select   min(chk) from   emp group   by   name having   count(*)   >1

获得有重复的记录chk最小的值,于是可以

delete from   emp where chk   not   in (select min(chk) from   emp group   by   name)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
若現在就覺得失望無力,未來那麽遠妳該怎麽扛...
————————————————————————致自己
回复

使用道具 举报

348

主题

3572

帖子

9251

积分

论坛元老

Rank: 8Rank: 8

积分
9251
沙发
 楼主| 发表于 2020-4-19 23:56:03 | 只看该作者
若現在就覺得失望無力,未來那麽遠妳該怎麽扛...
————————————————————————致自己
回复 支持 反对

使用道具 举报

348

主题

3572

帖子

9251

积分

论坛元老

Rank: 8Rank: 8

积分
9251
板凳
 楼主| 发表于 2020-4-22 23:37:10 | 只看该作者
若現在就覺得失望無力,未來那麽遠妳該怎麽扛...
————————————————————————致自己
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2024-9-28 05:34 , Processed in 0.129942 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表