mysql 相邻的相同数据如何去重

2017-05-25 11:38:17 +08:00
 FelixXie

例如:

五条数据

期望结果:

4262 次点击
所在节点    MySQL
12 条回复
lxh1217lzz
2017-05-25 11:42:38 +08:00
数据库储存本来就是无序的,哪来相领一说啊。。
shoaly
2017-05-25 12:23:23 +08:00
方式错了, 应该是在插入之前 就判断好是否需要插入.
woshixiaohao1982
2017-05-25 12:43:20 +08:00
@shoaly 人家想说的是 以前就有的数据,,但是现在要去重
johnny23
2017-05-25 12:47:08 +08:00
方法很多...建一张一摸一样的表 只是把重复的那个字段设为唯一值 然后写个程序导入进去 抓住异常就跳过 不过效率可能很低 或者用过 excel 来处理...看你的数据量咯 太大还是用点数据库自带的一些方式来处理比较好
reus
2017-05-25 12:52:55 +08:00
delete from t where id in (select id from t a left join t b on a.id = b.id + 1 and a.n = b.n)
jhdxr
2017-05-25 12:53:19 +08:00
因为 MySQL 没有 rownum,但你的表总有 id 吧,如果它是自增主键(不要求连续,但能够用它来判断你所谓的顺序),那么
```sql
SELECT
v
FROM
a AS table1
WHERE
table1.v != (
SELECT
table2.v
FROM
a AS table2
WHERE
table1.id < table2.id
ORDER BY
table2.id
LIMIT 1
)
OR NOT EXISTS (
SELECT
*
FROM
a AS table3
WHERE
table1.id < table3.id
)
```


当然这么做我真的觉得有点蛋疼。。。
reus
2017-05-25 12:53:33 +08:00
select * from t where id not in (select id from t a left join t b on a.id = b.id + 1 and a.n = b.n)
reus
2017-05-25 12:54:29 +08:00
select * from t where id not in (select id from t a left join t b on a.id = b.id + 1 and a.n = b.n order by id asc) 不过只能处理 id 递增的情况,不能有洞
FelixXie
2017-05-25 12:59:39 +08:00
@shoaly 嗯,确实是。
debuggerx
2017-05-25 13:10:27 +08:00
表名:test
id value
1 1
2 1
3 1
4 2
5 2
6 3
7 4
8 4
9 5

select id ,value from test t where t.value <> (select value from test where id = t.id -1) or t.id = 1 ;

结果:
1 1
4 2
6 3
7 4
9 5

随手写的不知道到是不是这个。。
复杂的我肯定就直接写 py 了……
CRVV
2017-05-25 13:25:57 +08:00
受 jhdxr 的启发,用 PostgreSQL 可以写成这样,其实没什么区别,只是短一些

SELECT a.id, a.value FROM a
LEFT JOIN LATERAL (SELECT * FROM a AS next WHERE next.id > a.id LIMIT 1) AS next ON TRUE
WHERE a.value = next.value IS NOT TRUE;
mingyun
2017-05-28 08:51:55 +08:00
10 楼可行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/363680

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX