我有一个类似于我想要的remove duplicates.
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));
如果我犯了任何错误,请不要对我苛刻。我只是一个几乎没有经验的新手:)
答案 0 :(得分:3)
据我所知,一个简单的DELETE JOIN就可以了;
DELETE m1
FROM map m1
JOIN map m2
ON m1.address = m2.address
AND m1.id > m2.id;
这将删除存在ID较低且地址相同的行的所有行。
...并且始终记住,在从Internet上的随机人员运行可能具有破坏性的SQL之前,请始终备份。
答案 1 :(得分:1)
您可以使用临时表并插入忽略来实现您想要的(这是一种方式,有多种方式)。
在stackoverflow上已经提出了类似的问题,请参阅: How to delete Duplicates in MySQL table