Mysql查询,用于搜索包含重复字段的行并将其删除


Mysql query that searches for rows that contain duplicate fields and deletes them?

我有一个数据库表,其中包含以下字段

username, description, password.

有时,成员相互复制描述以节省时间

所以我有这个:

John-John的描述-John的密码

Michael-John的描述-Michael的密码

是否有一个mysql查询可以搜索重复的字段条目并将其删除?当我们处理整行数据时,删除它怎么样?

创建一个新表,移动其中不重复的条目,删除旧表并重命名新表。

示例:

CREATE TABLE `new_table` as
    SELECT * FROM `old_table` WHERE 1 GROUP BY [columns to remove duplicates by];
DROP TABLE `old_table`;
RENAME TABLE `new_table` TO `old_table`;

然而,它只适合定期使用,并且不会检查是否有任何重复。它只是将唯一的条目分组,然后将它们移动到另一个表中。当您想要筛选条目时,它非常有用。


另一种方法是这样检查:

SELECT `name` FROM `table` WHERE `description` LIKE '%descriptiontexthere%'

然后,如果找到了一些结果,那就是重复
然而,有一个很大的缺点:用户只能更改一个字母,查询将失败
然而,可以通过将描述拆分为数组来避免(并非完全)这种缺点。例如,每100个字符拆分一次,然后像上面的例子一样进行检查,但有多个条件(例如description LIKE 'first100chars' OR description LIKE 'second100chars')。


第三种方法是将描述拆分为单词数组,然后选择包含太多相同单词的行。有X个相同单词的行可能是重复的。您可以根据输入的描述的长度设置支架。

您永远无法确定它是否重复,除非它是完全相同的条目