none
如何删除“表”中重复的记录??? RRS feed

  • 问题

  • 如何删除“表”中重复的记录???  

    表的名称:linshidaList。

    如果表linshidaList中,有好几条记录的DATime、MeterType、MeterNo、Qty、Qty01字段对应的值是一样的,那么将重复的记录删除,只保留一条。

    这样的SQL语句应该怎样写???         


    Science and technology is my lover.

    2012年7月9日 2:55

答案

  • 2012年7月9日 3:19
    版主
  • 这个可以,推荐使用maco大侠给出的帖子的

    --3、删除重复记录没有大小关系时,处理重复值中的方法一

    USE tempdb 
    
    IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'#A表') AND type in (N'U'))
    DROP TABLE #A表
    
    CREATE TABLE  #A表 
    ([intType] int,[name] varchar(4),[int3] int)
    insert #A表
    select 0,'张三',2 union all
    select 99,'张三',0 union all
    select 0,'李四',2 union all
    select 99,'李四',1 union all
    select 99,'王五',1 union all
    select 99,'赵六',0 union all
    select 0,'赵六',0 union all
    select 99,'X',0 union all
    select 0,'Y',0
    
    
    if object_id('Tempdb..#') is not null
        drop table #
    Select distinct * into # from #A表--排除重复记录结果集生成临时表#
    
    truncate table #A表--清空表
    
    insert #A表 select * from #    --把临时表#插入到表#T中
    
    select * from #A表


    给我写信: QQ我:点击这里给我发消息

    2012年7月12日 4:44

全部回复

  • 2012年7月9日 3:19
    版主
  • 参考:

    http://topic.csdn.net/u/20080626/00/43d0d10c-28f1-418d-a05b-663880da278a.html

    谢谢。这样就可以了。

    alter table linshidaList add ID int identity

    delete t from linshidaList t where exists(select 1 from linshidaList where DATime=t.DATime and MeterType = t.MeterType and MeterNo=t.MeterNo and Qty=t.QTY and Qty01=t.Qty01 and ID>t.ID)

    alter table linshidaList drop column ID

    但是不明白,思路是什么???

    “delete t from linshidaList t where exists()”这是什么用法???


    Science and technology is my lover.

    2012年7月9日 4:49
  • 参考:

    http://topic.csdn.net/u/20080626/00/43d0d10c-28f1-418d-a05b-663880da278a.html

    谢谢。这样就可以了。

    alter table linshidaList add ID int identity

    delete t from linshidaList t where exists(select 1 from linshidaList where DATime=t.DATime and MeterType = t.MeterType and MeterNo=t.MeterNo and Qty=t.QTY and Qty01=t.Qty01 and ID>t.ID)

    alter table linshidaList drop column ID

    但是不明白,思路是什么???

    “delete t from linshidaList t where exists()”这是什么用法???


    Science and technology is my lover.

    是采用自连接的办法,查找出表与本身的那几个栏位值相同的 但是ID不一致的.

    就删除掉.

    “delete t from linshidaList t where exists()”这是什么用法???

    这个你可以查询下BOL


    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.

    2012年7月9日 5:09
  • 参考:

    http://topic.csdn.net/u/20080626/00/43d0d10c-28f1-418d-a05b-663880da278a.html

    谢谢。这样就可以了。

    alter table linshidaList add ID int identity

    delete t from linshidaList t where exists(select 1 from linshidaList where DATime=t.DATime and MeterType = t.MeterType and MeterNo=t.MeterNo and Qty=t.QTY and Qty01=t.Qty01 and ID>t.ID)

    alter table linshidaList drop column ID

    但是不明白,思路是什么???

    “delete t from linshidaList t where exists()”这是什么用法???


    Science and technology is my lover.

    是采用自连接的办法,查找出表与本身的那几个栏位值相同的 但是ID不一致的.

    就删除掉.

    “delete t from linshidaList t where exists()”这是什么用法???

    这个你可以查询下BOL


    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.

    一般都是“Delete  from” ,而这里确实“delete t from”   ,这就是自连接???


    Science and technology is my lover.

    2012年7月9日 6:20
  • 参考:

    http://topic.csdn.net/u/20080626/00/43d0d10c-28f1-418d-a05b-663880da278a.html

    谢谢。这样就可以了。

    alter table linshidaList add ID int identity

    delete t from linshidaList t where exists(select 1 from linshidaList where DATime=t.DATime and MeterType = t.MeterType and MeterNo=t.MeterNo and Qty=t.QTY and Qty01=t.Qty01 and ID>t.ID)

    alter table linshidaList drop column ID

    但是不明白,思路是什么???

    “delete t from linshidaList t where exists()”这是什么用法???


    Science and technology is my lover.

    是采用自连接的办法,查找出表与本身的那几个栏位值相同的 但是ID不一致的.

    就删除掉.

    “delete t from linshidaList t where exists()”这是什么用法???

    这个你可以查询下BOL


    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.

    一般都是“Delete  from” ,而这里确实“delete t from”   ,这就是自连接???


    Science and technology is my lover.

    你那里不加t 的话 语法会报错的

    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.

    2012年7月9日 6:26
  • 谢谢您,但有这样的疑问啊。。。

           一般都是“Delete  from” ,而这里确实“delete t from”   ,这就是自连接???


    Science and technology is my lover.

    2012年7月11日 6:00
  • Qty01=t.Qty01 and ID>t.ID 这里最后我觉得应该是

    Qty01=t.Qty01 and ID<>t.ID

    无论是大于ID还是小于ID的

    比如当前ID是10,那么也要查找10之前的记录啊


    给我写信: QQ我:点击这里给我发消息

    2012年7月12日 2:41
  • 经过测试,你写的语句不行哦

    USE tempdb 
    
    IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'#A表') AND type in (N'U'))
    DROP TABLE #A表
    
    CREATE TABLE  #A表 
    ([intType] int,[name] varchar(4),[int3] int)
    insert #A表
    select 0,'张三',2 union all
    select 99,'张三',0 union all
    select 0,'李四',2 union all
    select 99,'李四',1 union all
    select 99,'王五',1 union all
    select 99,'赵六',0 union all
    select 0,'赵六',0 union all
    select 99,'X',0 union all
    select 0,'Y',0
    
    
    ALTER TABLE #A表 ADD ID INT IDENTITY
     
    DELETE  t
    FROM    #A表 t
    WHERE   EXISTS ( SELECT 1
                     FROM   #A表
                     WHERE  [intType] = t.[intType]
                            AND [name] = t.[name]
                            AND [int3] = t.[int3]
                            AND ID > t.ID )
                            
    ALTER TABLE #A表 DROP COLUMN ID 
    
    select * from #A表


    给我写信: QQ我:点击这里给我发消息

    2012年7月12日 3:43
  • 这个可以,推荐使用maco大侠给出的帖子的

    --3、删除重复记录没有大小关系时,处理重复值中的方法一

    USE tempdb 
    
    IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'#A表') AND type in (N'U'))
    DROP TABLE #A表
    
    CREATE TABLE  #A表 
    ([intType] int,[name] varchar(4),[int3] int)
    insert #A表
    select 0,'张三',2 union all
    select 99,'张三',0 union all
    select 0,'李四',2 union all
    select 99,'李四',1 union all
    select 99,'王五',1 union all
    select 99,'赵六',0 union all
    select 0,'赵六',0 union all
    select 99,'X',0 union all
    select 0,'Y',0
    
    
    if object_id('Tempdb..#') is not null
        drop table #
    Select distinct * into # from #A表--排除重复记录结果集生成临时表#
    
    truncate table #A表--清空表
    
    insert #A表 select * from #    --把临时表#插入到表#T中
    
    select * from #A表


    给我写信: QQ我:点击这里给我发消息

    2012年7月12日 4:44