首页新闻找找看学习计划

一个表,只有一个字段 表里有n条数据 数据有重复的 我现在想将重复的数据保留一条,sql 如何去写?

0
悬赏园豆:5 [已解决问题] 解决于 2017-08-31 18:11

一个表,只有一个字段 表里有n条数据 数据有重复的 我现在想将重复的数据保留一条,删除多余的,sql 如何去写?

坚持到放弃的主页 坚持到放弃 | 初学一级 | 园豆:131
提问于:2017-08-22 18:57
< >
分享
最佳答案
0

你可以新建一张temp表,先select distinct ,把选出的数据插入临时表,清空原表,把临时表数据插回原表,再删除临时表

收获园豆:3
流年飞雨 | 小虾三级 |园豆:1923 | 2017-08-23 01:47

还有可以新增一列seq,通过序列赋值,然后
(select field, min(seq)
from xxx
group by field) min
然后删除不在上面的列
delect from xxx
where field, seq not in min
然后删除新增的列
想写一条语句的话不知道如何写,因为记得rowid一个字符串,每次都不一样,用不上,自己弄个seq不会改变才可以使用

流年飞雨 | 园豆:1923 (小虾三级) | 2017-08-23 02:11

@一座城你说你不懂: 清空原表存在风险 这张表时刻被查询 如果清空会带来不必要的麻烦

坚持到放弃 | 园豆:131 (初学一级) | 2017-08-23 09:21

@坚持到放弃: 表设计时就有问题啊,没有主键,就不好操作。
会被查询就把脚本操作放到服务器重启的时候做

流年飞雨 | 园豆:1923 (小虾三级) | 2017-08-23 10:20

@一座城你说你不懂: 确实不合理,我也是半路接手 。。至于我现在在想能否在不重启服务器的情况下搞定。

坚持到放弃 | 园豆:131 (初学一级) | 2017-08-24 12:44
其他回答(2)
0
删除表中多余的重复记录(多个字段),只留有rowid最小的记录 

delete from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
收获园豆:2
hahanonym | 园豆:1453 (小虾三级) | 2017-08-22 19:05

思路是对的 不过mysql中没有rowid这一说 oracle中存在 rowid这种伪列

支持(0) 反对(0) 坚持到放弃 | 园豆:131 (初学一级) | 2017-08-23 09:20
0

  ListVirtualNet = ListVirtualNet.GroupBy(p => new { p.IP, p.Port }).Select(g => g.First()).ToList();

 

正好我昨天也查了这个问题

猝不及防 | 园豆:1114 (小虾三级) | 2017-08-23 09:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册