delete from tabname where rowid=(select max(rowid) rowid from tabname where .....)

解决方案 »

  1.   

    delete form tabname where rowid>(select min(rowid) rowid from tabname where ...)
      

  2.   

    delete from a a where a.rowid!=(select max(rowid) from a b where a.bm=b.bm and a.mc=b.mc);
      

  3.   

    你是不是这个意思?
    一个表temp
    a     b
    1     1
    1     1
    2     2
    2     2
    2     2
    然后删除多余的记录,使之变成
    a     b
    1     1
    2     2
    事么?
      

  4.   

    表没有主键吗?那就是说两条记录完全一样了。
    delete from tablename where rowid=(select max(rowid) from tablename group by 所有字段 having count(*)>=2)
      

  5.   

    要删掉表中所有重复行,得用PL/SQL程序块才能做到吧。有哪位DX可以一句SQL语句就搞定么?
      

  6.   

    delete from tablename where rowid<(select max(rowid) from tablename group by 所有字段 having count(*)>=2)
      

  7.   

    删除重复记录吧。
     DELETE FROM TABLE_NAME 
         WHERE ROWID!=(SELECT MAX(ROWID) FROM TABLE_NAME D 
         WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2)
      

  8.   

    delete from tablename where rowid<(select max(rowid) from tablename group by 所有字段 having count(*)>=2)
    感觉这个挺好
      

  9.   

    jary12581的方法有点问题,如果有两个以上的记录有重复(不是指一个记录的重复条数)。liuyi8903的方法在删除某一特定重复纪录的时候可以使用。但要删掉表中所有重复行,我没想到有什么办法用一条SQL语句就搞定,哪位有解?
      

  10.   

    liuyi8903提供的sql就是删除表中所有的重复行。子查询的where条件根据需要修改
      

  11.   

    liuyi8903(西西)的可以了
     DELETE FROM TABLE_NAME 
         WHERE ROWID!=(SELECT MAX(ROWID) FROM TABLE_NAME D 
         WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2 AND ……)不过有资料说这种做法在50万以上的纪录时速度就无法忍受了。
      

  12.   

    delete form tabname where rowid>(select min(rowid) rowid from tabname where ...)
      

  13.   

    赫赫,偶说嘛,没看出哪里不对来啊jary12581的方法有点问题,如果有两个以上的记录有重复(不是指一个记录的重复条数)。liuyi8903的方法在删除某一特定重复纪录的时候可以使用。但要删掉表中所有重复行,我没想到有什么办法用一条SQL语句就搞定,哪位有解?偶觉得是这样的jary12581的方法
    delete from tablename where rowid=(select max(rowid) from tablename group by 所有字段 having count(*)>=2)
    这个是只删除一条重复记录时的写法
    delete from tablename where rowid<(select max(rowid) from tablename group by 所有字段 having count(*)>=2)
    这个是只保留一条重复记录时的写法,其余重复的都删了liuyi8903(西西)的这个偶觉得原理跟上面的第二种差不多,
    DELETE FROM TABLE_NAME 
         WHERE ROWID!=(SELECT MAX(ROWID) FROM TABLE_NAME D 
         WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2 AND ……)但是谁来告诉偶这句的意思
    SELECT MAX(ROWID) FROM TABLE_NAME D 
         WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2 AND ……)
    TABLE_NAME D 
    这里的D不是一个别称吗?
    这里的意思到底是实现表的自连接,还是什么???
      

  14.   

    嗯,我错了,liuyi8903的方法是可以的!学习!
      

  15.   

    liuyi8903(西西)的可以了
     DELETE FROM TABLE_NAME 
         WHERE ROWID!=(SELECT MAX(ROWID) FROM TABLE_NAME D 
         WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2 AND ……)不过有资料说这种做法在50万以上的纪录时速度就无法忍受了。这个没错,但记录数多的时候确实无法忍受,所以在知道会出现哪种重复现象的时候,自己制定where语句;
    其实还是多写几句,建个临时表什么的速度更快一些
      

  16.   

    还是有点不明白TABLE_NAME D  TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2 AND 这样就算是建立了自连接吗?
      

  17.   

    <
    SELECT MAX(ROWID) FROM TABLE_NAME D 
         WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2 AND ……)
    >这个sql有问题。用了别名后,table_name.col1不再是有效的标识符
      

  18.   

    DELETE FROM TABLE_NAME 
         WHERE ROWID!=(SELECT MAX(ROWID) FROM TABLE_NAME D 
         WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2 AND ……)这句,应该给外面的TABLE_NAME alias,里面的不需要DELETE FROM TABLE_NAME D
         WHERE ROWID!=(SELECT MAX(ROWID) FROM TABLE_NAME
         WHERE COL1=D.COL1 AND COL2=D.COL2 AND ……)
      

  19.   

    --<
    --SELECT MAX(ROWID) FROM TABLE_NAME D 
    --     WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2 AND ……)
    -->
    --这个sql有问题。用了别名后,table_name.col1不再是有效的标识符怎么解释,这个sql可以运行,结果也正确呀。