精华内容
下载资源
问答
  • 还是先上代码吧 ,可以先看 SQL语句去掉重复记录,获取重复记录 代码如下: ALTER procedure [dbo].[PROC_ITEMMASTER_GETUNIQUE] @PAGEINDEX INT,@uid int,@itemnumber varchar(50) AS begin tran –开始事务 drop ...
  • go — 张三100 与 王五80 是有重复的 INSERT INTO test_delete SELECT ‘张三’, 100 UNION ALL SELECT ‘张三’, 100 UNION ALL SELECT ‘李四’, 80 UNION ALL SELECT ‘王五’, 80 UNION ALL SELECT ‘王五’, ...
  • 删除重复记录的SQL语句

    千次阅读 2018-06-29 18:24:28
    有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。1、对于第一种重复,比
    原文地址为:
    删除重复记录的SQL语句
    

    有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。
    1、对于第一种重复,比较容易解决,使用
    select distinct * from tableName
    就可以得到无重复记录的结果集。
    如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除
    select distinct * into #Tmp from tableName
    drop table tableName
    select * into tableName from #Tmp
    drop table #Tmp
    发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。
    2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下
    假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集
    select identity(int,1,1) as autoID, * into #Tmp from tableName
    select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
    select * from #Tmp where autoID in(select autoID from #tmp2)
    最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)
    3、部分关键字段重复,且记录中有ID.
    第一种方法可一次删除所有重复的..(只保留重复中ID最小的记录)。
    delete from table where id not in ( select min(id) from table group by name)
    第二种方法每次只删除重复中ID最大的一条记录。
    delete from table where id in ( select max(id) from table group by name having count(*)>1)
    4、SQL程序删除
    declare @max integer,@id integer
    declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) > 1
    open cur_rows
    fetch cur_rows into @id,@max
    while @@fetch_status=0
    begin
    select @max = @max -1
    set rowcount @max
    delete from 表名 where 主字段 = @id
    fetch cur_rows into @id,@max
    end
    close cur_rows
    set rowcount 0

    自己还得出的办法:
    select   *   from   user1     where   [id]   not   in   (select   top   1   [id]   from   user1   a   where   name=user1.name)   
      --删就这样写   
      delete   from   user1     where   [id]   not   in   (select   top   1   [id]   from   user1   a   where   name=user1.name)
    或 delete from user where id not in ( select max(id) from user where name=user.name) 
    delete [user] where id not in (select max(id) from [user] group by name having count(*) > 1)
    max 或 min看具体情况而论。

    其他方法:
    ----A:保留id最大的行,删除其它行   
      --方法1   
      delete   [user]   from   [user]   t     
      inner   join(select   name,max(id)   as   id   from   [user]   group   by   name)   a   
      on   t.name   =   a.name   and   t.id   <>   a.id   
      --方法2   
      delete   [user]   from   [user]   t   
      where     exists(select   *   from   [user]   where   name   =   t.name   and   id   >   t.id)  
        
      ----B:保留id最小的行,删除其它行   
      --方法1   
      delete   [user]   from   [user]   t     
      inner   join(select   name,min(id)   as   id   from   [user]   group   by   name)   a   
      on   t.name   =   a.name   and   t.id   <>   a.id   
      --方法2   
      delete   [user]   from   [user]   t   
      where     exists(select   *   from   [user]   where   name   =   t.name   and   id   <   t.id)  
        
      ----C:删除所有重复的name行,一行也不留   
      delete   [user]   from   [user]   t     
      inner   join     
      (select   id   from   [user]   a   where   exists(select   *   from   [user]   where   name   =   a.name   group   by   name   having   count(*)   >   1))   as   b   
      on   t.id   =   b.id

    转载请注明本文地址: 删除重复记录的SQL语句
    展开全文
  • sql语句如何去除重复的数据

    万次阅读 2018-10-18 16:07:44
    重复数据主要有一下几种情况: 1.存在两条完全相同的纪录 这是最简单的一种情况,用关键字distinct就可以去掉 example: select distinct * from table(表名) where (条件) 2.存在部分字段相同的纪录(有主键id即...

    有重复数据主要有一下几种情况:
    1.存在两条完全相同的纪录
    这是最简单的一种情况,用关键字distinct就可以去掉
    example: select distinct * from table(表名) where (条件)

    2.存在部分字段相同的纪录(有主键id即唯一键)
    如果是这种情况的话用distinct是过滤不了的,这就要用到主键id的唯一性特点及group by分组
    example:
    select * from table where id in (select max(id) from table group by [去除重复的字段名列表,…])

    3.没有唯一键ID
    这种情况我觉得最复杂,目前我只会一种方法,有那位知道其他方法的可以留言,交流一下:
    example:
    select identity(int1,1) as id,* into newtable(临时表) from table
    select * from newtable where id in (select max(id) from newtable group by [去除重复的字段名列表,…])
    drop table newtable

    展开全文
  • SQL语句查询所有的重复记录,删除所有的重复记录,查找指定的重复记录
  • sql去除重复语句

    千次阅读 2017-11-14 15:00:00
    sql 单表/多表查询去除重复记录 单表distinct 多表group by group by 必须放在 order by 和 limit之前,不然会报错 ************************************************************************************ 1、查找...

    sql 单表/多表查询去除重复记录

    单表distinct

    多表group by

    group by 必须放在 order by 和 limit之前,不然会报错

    ************************************************************************************

    1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断

    select * from people
    where peopleId in (select  peopleId  from  people  group  by  peopleId  having  count(peopleId) > 1)

    2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录
    delete from people
    where peopleId  in (select  peopleId  from people  group  by  peopleId   having  count(peopleId) > 1)
    and rowid not in (select min(rowid) from  people  group by peopleId  having count(peopleId )>1)

    3、查找表中多余的重复记录(多个字段)
    select * from vitae a
    where (a.peopleId,a.seq) in  (select peopleId,seq from vitae group by peopleId,seq  having count(*) > 1)

    4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录
    delete from vitae a
    where (a.peopleId,a.seq) in  (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
    and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)


    5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录
    select * from vitae a
    where (a.peopleId,a.seq) in  (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
    and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

    (二)
    比方说
    在A表中存在一个字段“name”,
    而且不同记录之间的“name”值有可能会相同,
    现在就是需要查询出在该表中的各记录之间,“name”值存在重复的项;
    Select Name,Count(*) From A Group By Name Having Count(*) > 1

    如果还查性别也相同大则如下:
    Select Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1

    (三)
    方法一

    declare @max integer,@id integer

    declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) >; 1

    open cur_rows

    fetch cur_rows into @id,@max

    while @@fetch_status=0

    begin

    select @max = @max -1

    set rowcount @max

    delete from 表名 where 主字段 = @id

    fetch cur_rows into @id,@max
    end

    close cur_rows

    set rowcount 0

    方法二

    "重复记录"有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。

    1、对于第一种重复,比较容易解决,使用

    select distinct * from tableName

    就可以得到无重复记录的结果集。

    如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除

    select distinct * into #Tmp from tableName

    drop table tableName

    select * into tableName from #Tmp
    drop table #Tmp

    发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。

    2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下

    假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集

    select identity(int,1,1) as autoID, * into #Tmp from tableName

    select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID

    select * from #Tmp where autoID in(select autoID from #tmp2)

    最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)

    (四)
    查询重复

    select * from tablename where id in (select id from tablename group by id having count(id) > 1 )

    3、查找表中多余的重复记录(多个字段)
    select * from vitae a
    where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)

    运行会产生问题,where(a.peopleId,a.seq)这样的写发是通不过的!!! 



    1.查某一列(或多列)的重复值(只可以查出重复记录的值,不能查出整个记录的信息)

    例如:查找stuid,stuname重复的记录

    select stuid,stuname from stuinfo group by stuid,stuname having(count(*))>1


    2.查某一列有重复值的记录(此方法查出的是所有重复的记录,如果有两条记录重复的,就查出两条)

    例如:查找stuid重复的记录

    select * from stuinfo where stuid in (

    select stuid from stuinfo group by stuid having(count(*))>1

    )


    3.查某一列有重复值的记录(只显示多余的记录,也就是说如果有三条记录重复的,就显示两条)

    前提:需有一个不重复的列,此示例为recno。

    例如:查找stuid重复的记录

    select * from stuinfo s1 where recno not in (

    select max(recno) from stuinfo s2 where s1.stuid=s2.stuid  )




    查询表中前5条记录:

    select * from 表1 limit 5;   select * from 表1 limit 0,5;


    查询表中第5条到第7条记录:

    select * from 表1 limit 4,3;

    随即选取一个记录:

    select * from 表1 order by rand() limit 1;

    随即选取n条记录:

    select * from 表1 order by rand() limit n;









    本文转自 chengxuyonghu 51CTO博客,原文链接:http://blog.51cto.com/6226001001/1539581,如需转载请自行联系原作者
    展开全文
  • 海量数据(百万以上),其中有些全部字段都相同,有些部分字段相同,怎样高效去除重复? 如果要删除手机(mobilePhone),电话(officePhone),邮件(email)同时都相同的数据,以前一直使用这条语句进行去重: delete ...
  • 最基本的四种SQL语句删除重复记录的方法
  • SQL语句去掉重复记录,获取重复记录
  • ![图片说明](https://img-ask.csdn.net/upload/201906/10/1560105163_20427.png) 如图数据所示该怎么删除 TBYBH 字段的重复值并只保留其中一条,sql语句该怎么写?
  • 主要介绍了SQL语句实现删除重复记录并只保留一条,本文直接给出实现代码,并给出多种查询重复记录的方法,需要的朋友可以参考下
  • 正好想写一条删除重复语句并保留一条数据的SQL,网上查了一部分资料写的很详细,但还是在这里写下自己的理解,以遍后续学习 。如下:表字段和数据: SQL语句: [sql] view plain copy DELETE FROM `user` WHERE...

    正好想写一条删除重复语句并保留一条数据的SQL,网上查了一部分资料写的很详细,但还是在这里写下自己的理解,以遍后续学习 。如下:


    表字段和数据: 


    SQL语句: 

    1. DELETE FROM `userWHERE id NOT IN(SELECT * FROM(SELECT id FROM `userGROUP BY username)AS b)  

    理解:

    先从里面的SQL开始看

    1、SELECT id FROM `user` GROUP BY username  根据名字分组查询出每组的ID。

    2、SELECT * FROM(SELECT id FROM `user` GROUP BY username) AS b  这句话中有2个疑问点,

     
    第一、为什么要套这样一个select?因为 更新数据时使用了查询,而查询的数据又做更新的条件,mysql不支持这种方式

        如果不套上这个select查询,那么将会报1093 -  You can't specify target table 'user' for update in FROM clause错误。

    第二、这句话中一定要取别名,不然会报1248 - Every derived table must have its own alias 错误

    3、结合上面的分析来看一下整个的SQL语句理解,先将分组的ID查出来,然后删除USER表中ID 不在分组ID中的数据,那么就实现效果了。

    delete from 表名 where  ID not in (select * from (select  id from 表名 group by 分组的列名)   别名)


    效果如下:

    展开全文
  • SQL语句,删除重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除重复的呢
  • SQL语句查询去除重复记录

    万次阅读 2019-01-21 13:52:57
    sql 单表/多表查询去除重复记录 单表distinct 多表group by group by 必须放在 order by 和 limit之前,不然会报错 ************************************************************************************ 1...
  • 前几天在做一个需求的时候,需要清理mysql中重复的记录,当时的想法是通过代码遍历写出来,然后觉得太复杂,心里想着应该可以通过一个sql语句来解决问题的。查了资料,请教了大佬之后得出了一个很便利的sql语句,...
  • SQL查询重复语句删除重复数据

    千次阅读 2018-07-16 11:55:26
    原创地址https://www.cnblogs.com/lanliying/p/5695349.html(不知道原创在哪 我是在他这里找的)在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除重复的呢1、查找表中多余的重复记录,重复记录是根据单个...
  • 即有唯一键主键ID(最常见情况)如果是这种情况的话用distinct是过滤不了的,这就要用到主键id的唯一性特点及group by分组select*fromtablewhereidin(selectmax(id)fromtablegroupby[去除重复的字段名列表,....]);...
  • sql语句去除重复数据

    2017-08-17 15:14:28
    1、查找重复记录select orderid from 表 where operatedesc ='取消订单' group by orderid having count (orderid) > 12、删除select * from 表 where orderid in (select orderid from 表 where operatedesc ='取消...
  • 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除重复的呢 1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select peopleId from ...
  • 查找所有重复标题的记录: SELECT * FROM t_info a WHERE ((SELECT COUNT(*) FROM t_info WHERE Title = a.Title) > 1) ORDER BY Title DESC 一。查找重复记录 1。查找全部重复记录 Select * From 表 Where 重复...
  • sql查询语句去除重复列(行)

    万次阅读 多人点赞 2018-04-14 13:26:07
    重复数据主要有一下几种情况:1.存在两条完全相同的纪录这是最简单的一种情况,用关键字distinct就可以去掉example: select distinct * from table(表名) where (条件)2.存在部分字段相同的纪录(有主键id即唯一...
  • 如果要删除手机(mobilePhone),电话(officePhone),邮件(email)同时都相同的数据,以前一直使用这条语句进行去重:   Sql代码 :    delete from 表 where id not in (select max(id) from 表 group by mobile...
  • sql查询去除重复语句 sql 单表/多表查询去除重复记录 单表distinct 多表group by group by 必须放在 order by 和 limit之前,不然会报错 *****************************************************************...
  • 以下就重复记录删除的问题作一... 如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除 代码如下: select distinct * into #Tmp from tableName drop table tableName select * into tableName from
  • SQL语句删除重复记录

    2020-03-03 23:41:52
    本文介绍了用四种方法教你如何用SQL语句删除重复记录。
  • 内容包含四种oracle数据去重语句,拿来直接能用的,
  • **#例1:根据手机号customer_id查询所有重复的数据** SELECT * FROM aad_apply_main WHERE customer_id IN ( SELECT customer_id FROM aad_apply_main GROUP BY ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 211,312
精华内容 84,524
关键字:

去除重复的sql语句