首页 > 解决方案 > 选择相似的记录

问题描述

请考虑以下记录:

  1. 约翰·多伊
  2. 戈恩·多伊
  3. 彼得杏仁
  4. 安娜·李
  5. 丹娜·李
  6. 西蒙·克拉克
  7. 唐·多伊

我一直试图找出一个 SQL Select 语句,它只检索具有某种相似性的记录(分数待定)。在上面的示例中,预期的查询应返回第 1、2、5、6 和 8 行。我尝试查看MATCH AGAINST, LEVENSHTEIN,但这些函数在提供输入的搜索中起作用。就我而言,没有提供任何输入。我想要完成的是检测我的表中的重复记录。

标签: mysql

解决方案


您需要进行自联接来比较成对的记录。这是一个小提琴:https ://www.db-fiddle.com/f/ghkCVASHTsw5pfyySEQ9G4/0

  SELECT a.name, b.name
    FROM tbl a
    JOIN tbl b ON a.name > b.name
   WHERE compare(a.name, b.name) < threshold

compare(a,b)是您选择的比较函数。您可以使用字符串之间的Levenshtein 距离。或者你可以使用SOUNDEX(a.name) = SOUNDEX(b.name). 或任何其他可以进行您想要的模糊比较的东西。

我的示例中的ON子句避免了重复比较和自我比较。


推荐阅读