删除重复的记录,但每种至少保留其中一条?

[复制链接]
查看11 | 回复9 | 2007-7-4 17:27:50 | 显示全部楼层 |阅读模式
有一张表,有字段:code,begin_time,name和address
向该表插入较多数据之后,发现了一个问题:
没将code,begin_time建成联合主键,此时,表中已有部分数据的(code, begin_time)重复。
想建立(code, begin_time)的联合主键,但由于数据已经违反了该唯一性,所以失败。
此时,想将表中(code, begin_time)不唯一的记录删除,但每个重复的(code, begin_time)要保留其中的(任意)一条记录。
请问有什么办法?
目前的想法是:把所有唯一的(code, begin_time)的记录都查出来,然后创建一张新表:
但无论使用distinct,还是group by,都只能查出code,begin_time字段的内容,这样用create table newtable as (...)时,
则newtable中只会有这两个字段。
注:每条记录中,name与address字段的数据可以相同,也可以不相同,所以不能用把它们放到判断的标准中。
谢谢!
回复

使用道具 举报

千问 | 2007-7-4 17:27:50 | 显示全部楼层
delete from tb a
where a.rowid(select min(b.rowid) from tb b where b.code = a.code and b.begin_time = a.begin_time);
回复

使用道具 举报

千问 | 2007-7-4 17:27:50 | 显示全部楼层
非常感谢!
回复

使用道具 举报

千问 | 2007-7-4 17:27:50 | 显示全部楼层
不错!
回复

使用道具 举报

千问 | 2007-7-4 17:27:50 | 显示全部楼层
哈哈,哈
回复

使用道具 举报

千问 | 2007-7-4 17:27:50 | 显示全部楼层
rowid
回复

使用道具 举报

千问 | 2007-7-4 17:27:50 | 显示全部楼层
例子:
DELETE FROM emp E
WHEREE.rowid > ( SELECT MIN(X.rowid)

FROM emp X

WHEREX.emp_no = E.emp_no );
回复

使用道具 举报

千问 | 2007-7-4 17:27:50 | 显示全部楼层
路过
回复

使用道具 举报

千问 | 2007-7-4 17:27:50 | 显示全部楼层
http://www.itpub.net/690125,1.html
回复

使用道具 举报

千问 | 2007-7-4 17:27:50 | 显示全部楼层
哈哈 这个是面试常见题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行