返回信息流请教一个SQL的问题,根据两个字段JFHM,QYBM 把重复记录剔除掉,只留一条记录.用 distinct qybm,jfhm from table ,统计结果只包含两个字段,我想要一个完整的表,包含原表8个字段 ,而且没有把重复的记录剔除掉,请高手解答.
这是一条镜像帖。来源:北邮人论坛 / database / #1330同步于 2007/7/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Database机器人发帖
怎么用sql语句删除表中重复的数据
leoff
2007/7/24镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
那就select * from table呗
【 在 leoff (怕水的鱼) 的大作中提到: 】
: 请教一个SQL的问题,根据两个字段JFHM,QYBM 把重复记录剔除掉,只留一条记录.用 distinct qybm,jfhm from table ,统计结果只包含两个字段,我想要一个完整的表,包含原表8个字段 ,而且没有把重复的记录剔除掉,请高手解答.
在oracle中根据rowid来删吧,下面的测试通过:
create table test (a number,b varchar2(10),c number)
insert into test values (1,'a',2);
insert into test values (1,'a',2);
insert into test values (2,'a',2);
insert into test values (3,'a',2);
insert into test values (3,'a',2);
delete from test a where a.rowid!=(select min(b.rowid)from test b where b.a=a.a and b.b=a.b and b.c=a.c)
【 在 leoff 的大作中提到: 】
: 请教一个SQL的问题,根据两个字段JFHM,QYBM 把重复记录剔除掉,只留一条记录.用 distinct qybm,jfhm from table ,统计结果只包含两个字段,我想要一个完整的表,包含原表8个字段 ,而且没有把重复的记录剔除掉,请高手解答.
delete from table where rowid not in (select min(rowid) from table group by JFHM,QYBM )
【 在 KidCandy 的大作中提到: 】
: 好像要加distinct,具体的应该是select * distinct from table
有这样使用distinct的么。。
delete from table where rowid not in (select min(rowid) from table group by JFHM,QYBM )
以上这种方法虽然可以实现,但如果记录数太多的话,效率很低,建议用Exists改写,如下:
delete from table a
where not exists
(select 'x'
from (select min(rowid) as row_id from table b group by jfhm, qybm) b
where a.row_id = b.row_id)