爱问知识人 爱问教育 医院库

还是关于SQL语言的问题

首页

还是关于SQL语言的问题

我有一个表A,由于我的误操作,把一个表B的数据重复导入了三次,导致该表A内有重复的数据,等于有三个B表的数据,我想通过语言,删除其中重复的两个数据,保留一个,请问用SQL语言如何实现,谢谢各位大侠了。

提交回答
好评回答
  • 2006-04-01 14:54:59
    首先指出 mobilemall30 的回复中可能存在的问题: select 查询命令后返回的结果集默认是按照 第一字段的字母降序,数字升序排列,所以,在使用select top 600 * from A to C 这样的命令时导入C表的内容未必完全是B表中的内容,很可能是一部分A表和一部分B表的内容,原因就是:在进行查询的时候dbms已经自动为你排序。
    因为你的表没有主键约束或者unique约束,我连子查询都很不好写,无法分离数据,建议将该库按照日志点恢复。

    m***

    2006-04-01 14:54:59

其他答案

    2006-03-31 21:49:20
  • 因在A表中能导入三次B,说是A没有主键,如果用DISTINCT,会把正常数据中相同的记录误删,数据在写入三次时,表里的记录应该是按写入顺序排列的,如select * form A,你会发现,会有三块数据是有规律重复的,如原A有已经有500条记录,B中有100条记录,导入三次B后,你会发现A中第501至600是正常的B的记录,601到800是重复两次的B的记录,这样,你可找到重复的分界点,如上例是600,这样,你可以用如下操作处理:
    select top 600 * from A to C --将正常的数据导到C表中
    delete from A
    insert into a
    (select * from c)
    

    m***

    2006-03-31 21:49:20

类似问题

换一换
  • 程序设计 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...
最新问答 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):