0

我的数据库按以下顺序排列

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 行相同。我只想删除其中一个(它们都应该具有相同的日期、时间、user_id 和访问值)我也有很多我的数据库中的其他重复行(数百行)。我不知道我必须用于此类事情的查询。我尝试寻找一些解决方案,但它们涉及具有相同的 id 或将行复制到新表。注意:即使我必须多次运行此查询,我也没有任何问题。

在此处输入图像描述

4

2 回答 2

2

如果不能选择 ID 方式,您可以做的是向表中添加唯一键。

如.....

ALTER IGNORE TABLE  `tablename` ADD UNIQUE `keyname` (`date` ,`time` , `visits`);

添加键后,表将遍历行,并删除任何匹配的(重复的)。这样做的缺点是它将防止任何重复的行再次出现......这可能是也可能不是问题,具体取决于表的使用。

于 2013-04-08T22:29:17.087 回答
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
于 2013-04-08T22:31:20.363 回答