MySQL 删除重复行保留 none
MySQL delete duplicated rows keep none
我的 table 看起来像这样:
Event_id
Species
1
Dog
1
Horse
2
Dog
3
Cat
4
Fish
4
Bird
5
Cat
我不想保留任何具有重复 event_id 的行,因为我无法确定事件的物种类型。如何删除 mysql 中 table 的两行?我没有每一行的唯一 ID。
输出应如下所示:
Event_id
Species
2
Dog
3
Cat
5
Cat
提前致谢!
一个简单的方法是:
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
下面查询return只存在一次的event_id。所以可以用条件event_id not in
.
删除
select event_id
from my_tbl
group by event_id
having count(*) =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 |
+----------+---------+
我的 table 看起来像这样:
Event_id | Species |
---|---|
1 | Dog |
1 | Horse |
2 | Dog |
3 | Cat |
4 | Fish |
4 | Bird |
5 | Cat |
我不想保留任何具有重复 event_id 的行,因为我无法确定事件的物种类型。如何删除 mysql 中 table 的两行?我没有每一行的唯一 ID。
输出应如下所示:
Event_id | Species |
---|---|
2 | Dog |
3 | Cat |
5 | Cat |
提前致谢!
一个简单的方法是:
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
下面查询return只存在一次的event_id。所以可以用条件event_id not in
.
select event_id
from my_tbl
group by event_id
having count(*) =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 |
+----------+---------+