删除重复的行,不要保留一行

时间:2012-11-02 21:59:01

标签: mysql duplicates delete-row

我需要一个遍历数据库中每个条目的查询,检查单个值是否在数据库中的其他位置重复,如果是 - 删除两个条目(或全部,如果多于两个)。

问题是条目是URL,最多255个字符,无法识别行。由于性能限制,Stack Overflow上的一些现有答案对我不起作用,或者它们使用uniqueid,这在处理字符串时显然不会起作用。

长版:

我有两个包含URL(仅限URL)的数据库。一个数据库有大约3,000个URL,另一个大约有1,000个。

但是,1,000个网址中的大多数都来自3,000个网址数据库。我需要将1,000合并为3,000仅作为新条目

为此,我创建了第三个数据库,其中包含来自两个表的组合URL,大约有4,000个条目。我需要在这个数据库中找到所有重复的条目并删除它们(两个都没有离开)。

我已经跟踪了这个网站上的几个例子的查询,但每当我尝试删除这两个条目时,它最终会删除所有条目,或者给出sql错误。


替代地: 我有两个数据库,每个数据库包含单独的数据库。我需要检查一个数据库中的每一行与另一个数据库中的每一行,以找到任何不重复的行,然后将它们添加到第三个数据库。

1 个答案:

答案 0 :(得分:0)

由于您正在寻找SQL解决方案,因此这是一个。让我们假设您的表有一个列,为简单起见。但是,这当然适用于任何数量的领域:

CREATE TABLE `allkindsofvalues` (
  `value` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

以下一系列查询将实现您的目标:

CREATE TABLE allkindsofvalues_temp LIKE allkindsofvalues;

INSERT INTO allkindsofvalues_temp SELECT * FROM allkindsofvalues akv1 WHERE (SELECT COUNT(*) FROM allkindsofvalues akv2 WHERE akv1.value = akv2.value) = 1;

DROP TABLE allkindsofvalues;
RENAME TABLE allkindsofvalues_temp to allkindsofvalues;