MySQL删除重复行保留一个[关闭]
Posted
技术标签:
【中文标题】MySQL删除重复行保留一个[关闭]【英文标题】:MySQL delete duplicated rows keep none [closed] 【发布时间】:2021-12-28 14:19:13 【问题描述】:我的桌子是这样的:
Event_id | Species |
---|---|
1 | Dog |
1 | Horse |
2 | Dog |
3 | Cat |
4 | Fish |
4 | Bird |
5 | Cat |
我不想保留任何具有重复 event_id 的行,因为我无法确定事件的物种类型。如何在mysql中删除表的两行?我没有每行的唯一 ID。
输出应如下所示:
Event_id | Species |
---|---|
2 | Dog |
3 | Cat |
5 | Cat |
提前致谢!
【问题讨论】:
重复,但在数据库管理员上见dba.stackexchange.com/questions/69592 到目前为止您尝试过什么?你被困在哪里了? 【参考方案1】:这是我在 MySQL 8.0 上测试的一个解决方案(使用with
需要):
mysql> create table mytable (event_id int, species varchar(20));
mysql> insert into mytable (Event_id,Species) values (1,'Dog'), (1,'Horse'),
(2,'Dog'), (3,'Cat'), (4,'Fish'), (4,'Bird'), (5,'Cat');
mysql> with cte as (select event_id from mytable group by event_id having count(*)>1)
delete mytable from mytable join cte using (event_id);
mysql> select * from mytable;
+----------+---------+
| event_id | species |
+----------+---------+
| 2 | Dog |
| 3 | Cat |
| 5 | Cat |
+----------+---------+
【讨论】:
【参考方案2】:一个简单的方法是:
delete t1
from my_tbl as t1
inner join ( select event_id
from my_tbl
group by event_id
having count(*) >1
)as t2
on t1.event_id=t2.event_id;
演示:https://www.db-fiddle.com/f/7yUJcuMJPncBBnrExKbzYz/155
或者使用sybquery:
delete from my_tbl
where event_id not in ( select t1.event_id from (select event_id
from my_tbl
group by event_id
having count(*) =1) as t1
) ;
演示:https://www.db-fiddle.com/f/7yUJcuMJPncBBnrExKbzYz/151
以下查询返回仅存在一次的 event_id。所以你可以删除条件event_id not in
。
select event_id
from my_tbl
group by event_id
having count(*) =1
【讨论】:
以上是关于MySQL删除重复行保留一个[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
pandas删除数据行中的重复数据行基于dataframe所有列删除重复行基于特定数据列或者列的作何删除重复行删除重复行并保留重复行中的最后一行pandas删除所有重复行(不进行数据保留)
Pandas:如何删除重复的行,但保留所有行的最大值[重复]
pandas使用drop_duplicates函数基于subset参数指定的数据列子集删除重复行并设置keep参数保留重复行中的最后一个数据行