【发布时间】:2019-06-15 23:07:49
【问题描述】:
所以我有这张表(称为 test_table)
id | hotel_id | user_id
1 | 1 | 1
2 | 1 | 1
3 | 1 | 2
4 | 2 | 3
5 | 1 | 2
6 | 3 | 3
所以如果hotel_id和user_id相同,那么我想删除重复的行但保留最新的行(最新的行是id较高的行)。
所以删除我的表格后会如下表所示。
我删除了id 1,因为有一个更新的行id 2。
我删除了id 3,因为有一个更新的行id 5。
id | hotel_id | user_id
2 | 1 | 1
4 | 2 | 3
5 | 1 | 2
6 | 3 | 3
我尝试使用下面的代码,但它只检查一列是否重复。最有效的方法是什么?
delete test_table
from test_table
inner join (
select max(id) as lastId, hotel_id
from test_table
group by hotel_id
having count(*) > 1) duplic on duplic.hotel_id = test_table.hotel_id
where test_table.id < duplic.lastId;
【问题讨论】:
-
不要使用
MAX(id)。改为使用ORDER BY。并且您可以使用LIMIT COUNT(*) - 1留下一排 -
此外,它仅基于一列找到它,因为您仅对一列进行分组。试试
group by hotel_id, user_id -
@Anthony 你是什么意思不要使用
max(id)你能给我举个例子吗?
标签: mysql sql database group-by sql-delete