两条记录的字段A是相同的,我需要随便删除其中一个,SQL语句怎默写。
我有8000条记录,但是现在入库重复了有16000了,我需要按照A字段来删除戎余的

解决方案 »

  1.   

    ---转
    删除重复数据一、具有主键的情况
    a.具有唯一性的字段id(为唯一主键)
    delete table 
    where id not in 
    (
    select max(id) from table group by col1,col2,col3...
    )
    group by 子句后跟的字段就是你用来判断重复的条件,如只有col1,
    那么只要col1字段内容相同即表示记录相同。b.具有联合主键
    假设col1+','+col2+','...col5 为联合主键
    select * from  table where col1+','+col2+','...col5 in (
      select max(col1+','+col2+','...col5) from table 
    where having count(*)>1
    group by col1,col2,col3,col4 
    )
    group by 子句后跟的字段就是你用来判断重复的条件,
    如只有col1,那么只要col1字段内容相同即表示记录相同。c:判断所有的字段
      select * into #aa from table group by id1,id2,....
      delete table 
      insert into table 
      select * from #aa二、没有主键的情况a:用临时表实现
    select identity(int,1,1) as id,* into #temp from ta
    delete #temp 
    where id not in 
    (
      select max(id) from # group by col1,col2,col3...
    )
    delete table ta
    inset into ta(...)
       select ..... from #tempb:用改变表结构(加一个唯一字段)来实现
    alter table 表 add  newfield int identity(1,1)
    delete 表
    where newfield not in
    (
    select min(newfield) from 表 group by 除newfield外的所有字段
    )alter table 表 drop column newfield
      

  2.   

    这个办法或许可行.
    1.先用rs.Open "select distinct A,index, from tablename", db,这个语句用到distinct,它是去掉重复的记录的,通过这个查询你可以得出你的8000条记录,然后把查询出来的数据保存到一个数组.2.再将这个表中的数据全部删除掉.
    3.将刚才保存在数组里的的数据写到这个表中.
    就可以了.
      

  3.   

    我是联合主键A和B
    A是有相同记录的
    b.具有联合主键
    假设col1+','+col2+','...col5 为联合主键
    select * from  table where col1+','+col2+','...col5 in (
      select max(col1+','+col2+','...col5) from table 
    where having count(*)>1
    group by col1,col2,col3,col4 
    )
    你其中的:where col1+','+col2+','...col5 in (
      select max(col1+','+col2+','...col5) from table 怎摸写啊?
      

  4.   

    回复人: icedut(冰) ?