请问如何在一张数据表中,挑选出重复的记录。

mana5116 2003-06-05 03:18:00
还有一个问题,如何挑选出某些字段重复的记录。把所有的重复记录都列出来。
...全文
245 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Xlake 2003-06-10
  • 打赏
  • 举报
回复
gz
swq12345 2003-06-10
  • 打赏
  • 举报
回复
SQL SERVER 2000 具体怎么实现上面的问题?
liaolwj 2003-06-06
  • 打赏
  • 举报
回复
你用的如果是oracle 则可以这样测试:
SQL> create table a (
2 bm char(4), --编码
3 mc varchar2(20) --名称
4 )
5 /

表已建立.

SQL> insert into a values('1111','1111');
SQL> insert into a values('1112','1111');
SQL> insert into a values('1113','1111');
SQL> insert into a values('1114','1111');

SQL> insert into a select * from a;

插入4个记录.

SQL> commit;

完全提交.

SQL> select rowid,bm,mc from a;

ROWID BM MC
------------------ ---- -------
000000D5.0000.0002 1111 1111
000000D5.0001.0002 1112 1111
000000D5.0002.0002 1113 1111
000000D5.0003.0002 1114 1111
000000D5.0004.0002 1111 1111
000000D5.0005.0002 1112 1111
000000D5.0006.0002 1113 1111
000000D5.0007.0002 1114 1111

查询到8记录.


查出重复记录
SQL> select rowid,bm,mc from a where a.rowid!=(select max(rowid) from a b where a.bm=b.bm and a.mc=b.mc);

ROWID BM MC
------------------ ---- --------------------
000000D5.0000.0002 1111 1111
000000D5.0001.0002 1112 1111
000000D5.0002.0002 1113 1111
000000D5.0003.0002 1114 1111

删除重复记录
SQL> delete from a a where a.rowid!=(select max(rowid) from a b where a.bm=b.bm and a.mc=b.mc);

删除4个记录.

SQL> select rowid,bm,mc from a;

ROWID BM MC
------------------ ---- --------------------
000000D5.0004.0002 1111 1111
000000D5.0005.0002 1112 1111
000000D5.0006.0002 1113 1111
000000D5.0007.0002 1114 1111

这样就可以了
如果你是sqlserver 那,你在原来的表中加一个自动增量的字段(rowid)然后同样处理就可以了。
mana5116 2003-06-06
  • 打赏
  • 举报
回复
那如果找出来之后,删掉重复的,只留一个,怎么做呢?
hai_yu2000 2003-06-05
  • 打赏
  • 举报
回复
可以先建一个自增的字段使用一下语句来处理
select * from tablename a where a.自增资段>(select max(自增字段) from tablename b where a.coll1=b.coll1)这样的效率应该是比较高的,使用完后再将那个自增资段山除掉
dotnba 2003-06-05
  • 打赏
  • 举报
回复
两种写法,优劣好象没有定论
dotnba 2003-06-05
  • 打赏
  • 举报
回复
select A.*
from Table A
where
(select count(1)
from Table C
where A.Col1 = C.Col1 and A.Col2 = C.Col2 and ....A.ColN = C.ColN) > 1
dotnba 2003-06-05
  • 打赏
  • 举报
回复
select A.*
from Table A,
(select B.col1,B.col2,...,B.coln from table B group by B.col1,B.col2,...,B.coln having count(1) > 1) C
where A.Col1 = C.Col1 and A.Col2 = C.Col2 and ....A.ColN = C.ColN
liaolwj 2003-06-05
  • 打赏
  • 举报
回复
select col1,col2,count(*) //col1,col2为需要检查是否有重复记录的列
from table
group by col1,col2
having count(*) > 1
networld2002 2003-06-05
  • 打赏
  • 举报
回复

select field1 from table
group by field1
having count(*) > 1

752

社区成员

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

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