有一个表 就一个 name 字段
里面存放着N条记录, 这些个记录中可能存在有重复的。
现在要求 将name重复的记录 只保留一条 , 删除其余重复。
该怎么做? 要求还要 用最效率的方法。例:
修改前表:
name
tom
jack
tom
lich
mike
mike修改后表:
name
tom
jack
lich
mike

解决方案 »

  1.   

    普通删除 那语句咋写呢?delete from Name where ?=?不好弄啊
      

  2.   

    http://tech.163.com/06/0621/09/2K4NLFRH00091LRE.html
      

  3.   

    delete from tab where id not in(
    select id from (select turnscat name from tab) as t
    )稍微改下调试下.  没有经过调试的.
      

  4.   

    delete from table_Name where id in(
    select id from(select d.id,d.outer_code,row_number() over(partition by name order by name) row_flag from  table_Name d)t
    where t.row_flag > 1)
    这个应该可以了!!
      

  5.   


    create table userTable(
      id int,
      username varchar2(4)
    );insert into userTable values(1,'jack');
    insert into userTable values(2,'jack');
    insert into userTable values(3,'rose');
    insert into userTable values(4,'tom');
    insert into userTable values(5,'rose');
    insert into userTable values(6,'tom');select * from userTable;delete from userTable
    where rowid in (
      select a.rowid from userTable a,userTable b
      where a.rowid > b.rowid and a.username = b.username
    );
      

  6.   

    Oracle 建议用下面的方法
    delete Name a where rowid > (select min(x.rowid) from Name x where x.name = a.name);
    我用oracle 做的测试 这种方法最快,其他数据库没有试验