我按以下顺序拥有我的数据库
id date time user_id visits
---------------------------------------------------------------
1 02/19/13 1361257200 xxxxxxxxx 4699
2 02/20/13 1361343600 xxxxxxxxx 7264
3 02/21/13 1361430000 xxxxxxxxx 5281
4 02/21/13 1361430000 xxxxxxxxx 5281
5 02/22/13 1361516400 xxxxxxxxx 5473
正如你所看到的,我的id为3的行与id为4的第4行相同。我想只删除其中一行(它们都应该具有相同的值date,time,user_id和visit)I我的数据库中还有许多其他重复的行(数百个)。我不知道我必须使用的查询。我尝试搜索某些解决方案,但它们涉及具有相同的ID或将行复制到新表。 注意:即使我必须多次运行此查询,我也没有任何问题。
答案 0 :(得分:2)
如果ID方式不是一个选项,你可以做的是向表中添加一个唯一的密钥。
如......
ALTER IGNORE TABLE `tablename` ADD UNIQUE `keyname` (`date` ,`time` , `visits`);
当添加密钥时,表将遍历行,并删除任何匹配的行(重复的)。这样做的缺点是它会阻止任何重复的行再次出现.....根据表的使用情况,这可能是也可能不是问题。
答案 1 :(得分:2)
DELETE t2
FROM `your_table` AS t1
INNER JOIN `your_table` AS t2
ON t1.date = t2.date
AND t1.time = t2.time
AND t1.user_id = t2.user_id
AND t1.visits = t2.visits
AND t2.id > t1.id