查找表中多余的重复记录(多个字段)问题

timgarnet 2011-02-18 02:59:18
请教一下大家,我现在是想在一个表中查找重复的记录,以两个字段为标准查找,例如以姓名和编号为标准,我看网上的解决方法基本都是这样的
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)

为什么我用这个方法总说a.peopleId这句"在应使用条件的上下文(在 ',' 附近)中指定了非布尔类型的表达式",请问大家是什么意思?这确的应该怎么写?请高手指教,谢谢大家了。
...全文
450 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wing7742 2011-03-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 timgarnet 的回复:]
谢谢wing7742
那么我现在要删除其他的记录,只留下一条记录,该怎么写?
[/Quote]

参考
ljf33_2000 2011-03-08
  • 打赏
  • 举报
回复
如果想知道哪些记录是重复的:
select * from vitae a
where (select Count(1) from vitae where a.peopleId=peopleId and a.seq=seq)>1

如果是要删除重复的记录,如果该表没有可区分不同记录的其它主键的话,可以使用临时表,用IDENTITY函数全表插入到临时表中,在临时表中删除重复记录,删除原表记录,再将临时表中记录全部插入到原表中.
So_CooL 2011-02-19
  • 打赏
  • 举报
回复
select id,name from test
where (id+name) in (select id+name from test group by id+name having count(id+name) > 1)
duoxu1983 2011-02-18
  • 打赏
  • 举报
回复


;with cte as(
select name,no,item,row_number() over(partition by name,no order by item ) as cnt from #tab
)
delete from #tab where exists(select 'x' from cte where cte.name=#tab.name and cte.no=#tab.no and cte.item=#tab.item and cte.cnt>=2)
timgarnet 2011-02-18
  • 打赏
  • 举报
回复
谢谢wing7742
那么我现在要删除其他的记录,只留下一条记录,该怎么写?
wing7742 2011-02-18
  • 打赏
  • 举报
回复
CREATE TABLE #tab([NAME] VARCHAR(10),[no] VARCHAR(10),item INT)
INSERT #tab
SELECT 'a','001',2 UNION ALL
SELECT 'a','002',4 UNION ALL
SELECT 'b','003',4 UNION ALL
SELECT 'a','001',9 UNION ALL
SELECT 'b','003',8

SELECT a.* from #tab a,(SELECT NAME,no FROM #tab t
GROUP BY NAME,no HAVING COUNT(*)>1)b WHERE a.[NAME]=b.[NAME] AND a.no=b.no

/*
NAME no item
---------- ---------- -----------
a 001 2
a 001 9
b 003 4
b 003 8

(4 行受影响)
*/
Xiao_Ai_Mei 2011-02-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xiao_ai_mei 的回复:]
SQL code
select * from vitae a
where exists(select 1 from vitae where a.peopleId=peopleId and a.seq=seq)
[/Quote]2楼错了,还需要判断有个主键列不相同
Xiao_Ai_Mei 2011-02-18
  • 打赏
  • 举报
回复
select * from vitae a  
where exists(select 1 from vitae where a.peopleId=peopleId and a.seq=seq)
Xiao_Ai_Mei 2011-02-18
  • 打赏
  • 举报
回复
sql 不支持这种写法

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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