从Mysql表中删除重复项

时间:2014-05-19 07:00:57

标签: mysql duplicates duplicate-removal

我有一个类似于我想要的remove duplicates.

的mysql表
CREATE TABLE IF NOT EXISTS `map` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` text NOT NULL,
  `address` text NOT NULL,
  `type` text NOT NULL,
  `lat` text NOT NULL,
  `lng` text NOT NULL,
  PRIMARY KEY (`id`)
);
INSERT INTO `map` (`id`, `name`, `address`, `type`, `lat`, `lng`) VALUES
(607, 'Vostok Station', 'Antarctica', 'establishment', '-82.8627519', '-135'),
(608, 'Vostok Station', 'Antarctica', 'establishment', '-82.8627519', '-135');

我已尝试过类似的内容:

SELECT COUNT(address) AS numUsers;
delete from map 
where id in 
(SELECT MAX(id) FROM TABLE WHERE address IN (SELECT address FROM TABLE 
GROUP BY address 
HAVING COUNT(*)>1));

如果我犯了任何错误,请不要对我苛刻。我只是一个几乎没有经验的新手:)

2 个答案:

答案 0 :(得分:3)

据我所知,一个简单的DELETE JOIN就可以了;

DELETE m1
FROM map m1
JOIN map m2
  ON m1.address = m2.address
 AND m1.id > m2.id;

An SQLfiddle to test with

这将删除存在ID较低且地址相同的行的所有行。

...并且始终记住,在从Internet上的随机人员运行可能具有破坏性的SQL之前,请始终备份。

答案 1 :(得分:1)

您可以使用临时表并插入忽略来实现您想要的(这是一种方式,有多种方式)。

在stackoverflow上已经提出了类似的问题,请参阅: How to delete Duplicates in MySQL table