Mysql 如何将每条记录与另一条记录进行比较(名称反转问题)并删除其中的重复记录?

Mysql 如何将每条记录与另一条记录进行比较(名称反转问题)并删除其中的重复记录?,mysql,sql,Mysql,Sql,我很难识别唯一的记录值。 我有一张这样的桌子: ID NAME DESCRIPTION 1 Yanagida Fumit best author 2 Ha Il-kwan new author 3 Fumit Yanagida best author 4 Ha Il Kwan new author 5 Ilkwan Ha new author 在同一个名为autho table的表中有5条记录。但实际上,有两位作者。 第一条记

我很难识别唯一的记录值。 我有一张这样的桌子:

ID NAME            DESCRIPTION
1  Yanagida Fumit  best author
2  Ha Il-kwan      new author
3  Fumit Yanagida  best author
4  Ha Il Kwan      new author
5  Ilkwan Ha       new author
在同一个名为autho table的表中有5条记录。但实际上,有两位作者。 第一条记录和第三条记录存储在一个作者信息中,第二条、第四条和第五条记录存储在一个作者信息中。 我想把它做成下面这样

ID NAME            DESCRIPTION
1  Yanagida Fumit  best author
2  Ha Il Kwan      new author
这意味着,我要删除所有的反向名称问题的重复。 我想知道是否可以比较同一列中的两个值字符串。
请帮帮我。我会很高兴得到你的任何帮助

以下是一个php解决方案:

remove_duplicates("Yanagida Fumit");

function remove_duplicates($full_search_str) {        
    // establish connection to your db

    // fetch data
    $query = "          SELECT  `id`, `name` 
                        FROM    `" . $tbl_name . "`
                        WHERE   MATCH (`name`) AGAINST ('" . $full_search_str . "' IN BOOLEAN MODE)
                        AND     `name` <> '" . $full_search_str . "'
             ";

    // run query
    $results = $conn->query($query);

    // loop through results
    foreach($results as $result) {
            // build query
            $query = "  DELETE 
                        FROM    `" . $tbl_name . "`
                        WHERE   `id` = " . $result['id'];

            // run query
            $result = $conn->query($query);
    }
}
Oracle回答:

根据需要创建或替换表作者 选择不同的名称、描述
来自作者

您希望使用levenshtein距离来解决此问题。转换为SET,其中每个位都是一个确定字母。这足以识别95%以上的重复项。@Mech感谢您的快速回答!请您进一步解释关于levenshtein距离的更多细节,好吗?我在stack上找到了一个类似的解决方案,但我认为我没有正确使用它:谢谢大家!我很高兴你的帮助。我第一次面对levenshtein。所以我对每一个答案都感到惊讶,尤其是@VBoka的答案。。。PHP与此无关。此外,由于不必要的动态SQL和缺少准备好的语句,这有潜在的危险。哦,它会删除一个给定名称的所有实例,这一点都不需要……这是不够的;显示的数据已经不同,尽管这可能会删除一些条目。在第一次读取时,我没有看到您在单个记录的字段之间存在数据错位的记录以及单个字段的数据不一致,因此,您将面临以下问题:名字姓氏Ha Il Kwan Il Kwan Ha Ha Il Kwan这不是一个SQL唯一性问题-这是一个数据损坏问题,最好通过在开始时控制数据中的内容来解决。