一张表里面以两个字段为唯一字段,当几条记录的这两个字段完全相同时,需要删除重复项,如下表
a b c d
1 2 3 4
1 5 3 5
1 2 7 9
以a、b为唯一字段,第一条和第三条的a、b完全相同,所以,需要删除第一条记录1 2 3 4 或者第三条记录1 2 7 9请问各位大侠这种sql语句怎么写

解决方案 »

  1.   

    If you use SQL Server 2005You can do like below:WITH [MyTable ORDERED BY ROWID] AS
    (SELECT ROW_NUMBER() OVER (ORDER BY a ASC) AS ROWID, * FROM MyTable)
    DELETE FROM [MyTable ORDERED BY ROWID] WHERE ROWID =3
     
      

  2.   

    delete a
    from tablename a
    where c<>(select max(c) from tablename where a=a.a and b=a.b)
    or d<>(select max(d) from tablename where a=a.a and b=a.b and c=a.c)
      

  3.   

    If you use SQL Server 2000,you should select your data to a new table and delete it in new table.SELECT ROWID=IDENTITY(int,1,1) , * INTO MyTable1 FROM MyTable 
      

  4.   

    delete 表 where [id] not in (select max([id]) from 表 group by a,b )id是主键
      

  5.   

    pdgzzgx(火速空间) 和 YaoMing_csdn(姚明) 的方法都只能对单一字段进行处理zicxc(冒牌邹建 V0.3)的方法,一旦字段很多的话,就比较低效了
      

  6.   

    BEN1978() ( ) 信誉:100    Blog 
    你要的结果不能得到吗
      

  7.   

    CREATE TABLE Tb1(id int, [a] varchar(255), [b] varchar(255), [c] varchar(255), [d] varchar(255))
    INSERT Tb1(id, [a], [b], [c], [d])
               SELECT 1, '1','2','3','4'
    UNION ALL  SELECT 2, '1','5','3','5'
    UNION ALL  SELECT 3, '1','2','7','9'
    UNION ALL  SELECT 4, '1','4','7','6'
    delete Tb1 where [id] not in (select max([id]) from Tb1 group by a,b )
    delete Tb1 where [id] not in (select max([id]) from Tb1 group by a,c )
    select * from tb1
     
    drop table tb1如果更多,就组合