请教delphi Access数据库中如何找出重复的记录?然后删除重复数据记录

grace_zou 2012-05-10 10:08:00
两个表数据复制到一个表A了,可是怎么删除db.mdb表A中重复的记录?有什么好方法?
比如
有一个ACCESS数据表A如下
ID Name Score
01 老张 80
01 老李 70
01 老李 80
02 王二小 70
01 老张 80
04 李小黑 90
02 王二小 70

====================
现在我想删除 字段 ID Name Score 都重复的记录,达如下效果:
ID Name Score
01 老张 80
01 老李 70
01 老李 80
02 王二小 70
04 李小黑 90
表中没有主键?是不能设主键的
...全文
337 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
22222bbb 2012-05-10
  • 打赏
  • 举报
回复
要不你就给这张表建一个自动增长的 ID2,
Delete A where ID2 not in (select MAX(ID2) from A group by ID,NAME,SCORE)
grace_zou 2012-05-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
SQL code
select distinct * into b from a
drop table a
select * into a from b
drop table b
[/Quote]
a,b是两个表名?
我现在是要在同一个a表里面除重复记录,不是两个表
我看见佛 2012-05-10
  • 打赏
  • 举报
回复
select distinct * into b from a
drop table a
select * into a from b
drop table b
grace_zou 2012-05-10
  • 打赏
  • 举报
回复
这只是一个例表,当然表A远不只有这ID Name Score 三个字段,我是要根据前面几个字段值来判断是不是重复记录了
Aiviwo 2012-05-10
  • 打赏
  • 举报
回复
还是录入的时候先从数据库内查找一下,没有才保存就能保证唯一的记录了
zhujunxingqq 2012-05-10
  • 打赏
  • 举报
回复
偶认为2楼用临时表的那个方法是可以的。
garnel 2012-05-10
  • 打赏
  • 举报
回复
复制时就应该保证内容不重复,

select ID, Name, Score, from 表1 where ID+Name+Score not in (select ID+Name+Score from 表2)

类似这样处理,你复制完的表就不应该重复,已经有一部分字段内容重复然后再处理比较麻烦
grace_zou 2012-05-10
  • 打赏
  • 举报
回复
ADOQuery1.SQL.Text :='SELECT 字段1,字段2,字段3,Count(*)into #Tmp FROM A Group by 字段1,字段2,字段3 Having Count(*)> 1';
ADOQuery1.Open ;
try
While not ADOQuery1.Eof do
begin
ADOQuery1.SQL.Add('delete from (select 字段1,字段2,字段3,rn = row_number() over (partition by 字段1,字段2,字段3 order by 字段1,字段2,字段3) from @table) where rn > 1');
end;
finally
ADOConnection1.Close;
end;

这样也不行,思路有点乱,请高手指教!
grace_zou 2012-05-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
只能说表设计有问题

access没有唯一的标识,不能一次删除重复的数据,要通过前台删除或者再建一个表做为过渡吧
不像mssql有identity列,也有临时表,操作起來很容易。。。

你找出区别他们的信息了,再帮你
[/Quote]
表里面的内容就是没有唯一标识的,要删除表里面所有字段的数据都一样的记录,但可以根据前面三个字段来确定记录是不是重复的记录了,如果前面三个字段的数据都一样,那后面字段的数据也是一样的
我看见佛 2012-05-10
  • 打赏
  • 举报
回复
into a//这里是做为临时表来操作的,执行了上述语句后最终还是原来的一个表。
grace_zou 2012-05-10
  • 打赏
  • 举报
回复
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text :='select distinct * into b from a drop table a (select * into a from b drop table b)';
在delphi中按钮单击事件里面怎么写?我这样写之后,表A里面的重复数据并没有删除掉啊
kaikai_kk 2012-05-10
  • 打赏
  • 举报
回复
只能说表设计有问题

access没有唯一的标识,不能一次删除重复的数据,要通过前台删除或者再建一个表做为过渡吧
不像mssql有identity列,也有临时表,操作起來很容易。。。

你找出区别他们的信息了,再帮你

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧