delete from tableName1
where pk<>(select top 1 b.pk from tableName1 as b where colname=b.colname)
其中字段pk是关键字,colname是可能出现重复的字段

解决方案 »

  1.   

    另外,建义楼主先用select下,别删错了,哈哈
      

  2.   

    没有表结构,别人就给我这样出的题,哪比如表中只有id和name吧,name可能有重,你刚才给我写的那个pk是不是就是id?
      

  3.   

    ID       NAME
    1        aaa
    2        aaa楼主你是想删1还是想删2
    不懂了你了.
      

  4.   

    我明白了删一就可以top,删2就max
      

  5.   

    PK 主键  feild 重复字段SELECT * FROM table
    WHERE (feild IN 
              (SELECT feild 
             FROM (SELECT MIN(PK) AS PK, feild  FROM table GROUP BY 
              feild  HAVING (COUNT(PK) > 1)) a))
     AND (ID NOT IN
              (SELECT pk
             FROM (SELECT MIN(PK) AS pk, feild FROM table
                     GROUP BY feild 
                     HAVING (COUNT(PK) > 1)) a))
    ---------------------
    这句是取出重复的记录
    SELECT count(Pk) , feild FROM table
                     GROUP BY feild 
                     HAVING COUNT(PK) > 1 
    ---- count 改成 min 取一个最小的留下 not in 不在最小列表中的 删除----------fest(fest) 写的这句没看懂  试了下应该是错的。
      

  6.   

    xFeater(宿命使者)    
    我明白了删一就可以top,删2就max不论是保留第一条记录或者最后一条记录都可以通过top来实现,只不过逆序的时候要添加order by id desc语句  
     
      

  7.   

    可以啊,选将数据库中的相同的数赋值给一个变量,然后再用Delete 将其删除就可以了
      

  8.   

    delete from tbl awhere rowid<(select max(b.rowid) from tbl b where a.col1=b.col1 and a.col2 = b.col2);
      

  9.   

    其它人的全部是錯的 只有 plmsoft 的方法可以
      

  10.   

    方法一 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子句中省去此列)呵呵,在别的地方刚看到的
      

  11.   

    group by 嘛 min / max 加 group by OK