sql如何删除一个字段有重复的数据?

kimuji 2017-03-06 11:00:37
[size=12px]
delete from table
where a not in
(select distinct a,b from A )


其中 a 为有重复的数据的列
这样写报错:Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.

求大神指点该怎么写
[/size]
...全文
528 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 版主 2017-03-06
  • 打赏
  • 举报
回复
引用 9 楼 kimuji 的回复:
你给的这个不行啊, ;WITH temp AS ( SELECT *,ROW_NUMBER()OVER(PARTITION BY a ORDER BY a) AS num FROM #A ) “)” 报错了
唉。。真是醉了。。。。
kimuji 2017-03-06
  • 打赏
  • 举报
回复
万分感谢唐诗版主,受用。
唐诗三百首 2017-03-06
  • 打赏
  • 举报
回复
try this,

delete t
 from (select *,rn=row_number() over(partition by a,b order by getdate()) from [table]) t
 where t.rn>1
kimuji 2017-03-06
  • 打赏
  • 举报
回复
你给的这个不行啊, ;WITH temp AS ( SELECT *,ROW_NUMBER()OVER(PARTITION BY a ORDER BY a) AS num FROM #A ) “)” 报错了
二月十六 版主 2017-03-06
  • 打赏
  • 举报
回复
引用 6 楼 kimuji 的回复:
但是数据只有部分列冗余 比如 A列 B列数据冗余 C列 D列数据都不同 这个怎么删除?
那就是删除A\B两列同时重复的数据?上边那个语句PARTITION BY a ,b就行了
二月十六 版主 2017-03-06
  • 打赏
  • 举报
回复
引用 5 楼 kimuji 的回复:
这样说吧,就是如何删除冗余数据,只留一条

语句:
--测试数据
if object_ID('tempdb..#A') is not null
drop table #A
Go
CREATE TABLE #A
(
a INT ,
stat NVARCHAR(100)
)
Insert #A
select 1,'测试1' UNION ALL
select 2,'测试2' UNION ALL
select 1,'测试1' UNION ALL
select 3,'测试3'
--测试数据结束
;WITH temp AS (
SELECT *,ROW_NUMBER()OVER(PARTITION BY a ORDER BY a) AS num FROM #A
)
--删除语句
DELETE FROM temp WHERE num >1

--读取测试结果
SELECT * FROM #A

结果:




kimuji 2017-03-06
  • 打赏
  • 举报
回复
但是数据只有部分列冗余 比如 A列 B列数据冗余 C列 D列数据都不同 这个怎么删除?
kimuji 2017-03-06
  • 打赏
  • 举报
回复
这样说吧,就是如何删除冗余数据,只留一条
二月十六 版主 2017-03-06
  • 打赏
  • 举报
回复
引用 2 楼 kimuji 的回复:
[quote=引用 1 楼 sinat_28984567 的回复:] delete from table where a not in (select distinct a from A )
这样一行都删除不了 因为a列是有重复数据的列[/quote] 好吧,我是看你的sql语句写的有问题,not in后边返回了两列值,所以报了那个错误,我以为这就是问题。 你贴上一些测试数据和想要的结果吧,没太看明白你的意思
kimuji 2017-03-06
  • 打赏
  • 举报
回复
delete from table where a not in (select distinct a from table) 刚语句没写对
kimuji 2017-03-06
  • 打赏
  • 举报
回复
引用 1 楼 sinat_28984567 的回复:
delete from table where a not in (select distinct a from A )
这样一行都删除不了 因为a列是有重复数据的列
二月十六 版主 2017-03-06
  • 打赏
  • 举报
回复
delete from table where a not in (select distinct a from A )

34,594

社区成员

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

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