由于在设计表时,没有设计关键字,也没有主键。在实际使用的过程中,不小心向这个表里把相同的一些数据增加了两次。于是出现了一些完全相同的记录,请问:怎样删除其中的一条?用SQL语言会把两条都删除掉。手工删除釜提示错误。

解决方案 »

  1.   

    不能删的原因是破坏了数据的唯一性给该表添加一个主键字段,int型,设置为自增然后就可以手动删了
      

  2.   

    Table1表中的数据未删除之前如下
    ID为自动编号, 如果你表中没有你就加一个, RefNO为有重复的数据字段.
    ID       RefID
    1 133
    2 33
    3 44
    4 33
    5 44
    6 133SQL语句如下DECLARE @REFID VARCHAR(10)
    DECLARE @ID INT
    DECLARE @I INT
    DECLARE csREFID CURSOR FOR --先得到 REFID
    SELECT REFID
    FROM Table1
    GROUP BY  REFID
    HAVING COUNT(REFID)>1OPEN csREFID
    FETCH NEXT FROM csREFID INTO  @REFID
    WHILE @@FETCH_STATUS =0 
    BEGIN
    -------------------------------------------------------
      DECLARE csID CURSOR FOR --再得到 ID
      SELECT [ID] FROM Table1 WHERE REFID=@REFID ORDER BY ID
      OPEN csID
      FETCH NEXT FROM csID INTO @ID
      FETCH NEXT FROM csID INTO @ID
      WHILE @@FETCH_STATUS=0
      BEGIN
        DELETE FROM Table1 WHERE [ID]=@ID
        FETCH NEXT FROM csID INTO @ID
      END
      CLOSE csID
      DEALLOCATE csID
    --------------------------------------------------------

      FETCH NEXT FROM csREFID INTO @REFID
    ENDCLOSE csREFID
    DEALLOCATE csREFID
    GO最终得到的数据如下
    ID       RefID
    1 133
    2 33
    3 44你自已套用这个格式吧.
      

  3.   

    set rowcount 1
    delete .....
      

  4.   

    select distinct * into #temp from table where 条件  /* 去重复到临时表 */
    delete from table where 条件                        /* 删除那两条 */
    insert into table select * from #temp               /* 放回正常的记录 */
      

  5.   

    先创建一個主键ID自增字段,
    DELETE FROM TABLE
      WHERE ID IN (SELECT ID FROM TABLE TI JOIN TABLE T2
         ON T1.ID>T2.ID AND
            T1.FIELD=T2.FIELD AND......)
      

  6.   

    1.长远之计
      因为现在数据库结构违返了数据库原理.建议在现在的表结构中新增一个KEY(可以使用int标识),然后用sql找到符合条件的记录,并删除重复的记录.2.使用临时表
    select distinct * into #temp from table where condition   //将查询符合条件的记录并合并相同记录,添加到临时表中
    delete from table where condition    //从表中删除符合条件的记录,有重复的全部删除.                    
    insert into table select * from #temp          //将临时表中的记录重新添加到表中     
      

  7.   

    delete from tb where id not in (select min(id) from tb group by refid having count(*)>0)
    这样行吗?
      

  8.   

    谢谢各位大哥,我都试过,好像只有加ID才能删除.
    使用临时表的方法:
    2.使用临时表
    select distinct * into #temp from table where condition   //将查询符合条件的记录并合并相同记录,添加到临时表中
    delete from table where condition    //从表中删除符合条件的记录,有重复的全部删除.                    
    insert into table select * from #temp          //将临时表中的记录重新添加到表中  
    当我输入 condition 时,删除不了,因为这个condition指到了两条一样的记录.