选择相似的记录



请考虑以下记录:

  1. 无名氏
  2. Gohn Doe
  3. 彼得·阿尔蒙德
  4. Anna Lee
  5. Danna Lee
  6. Simon Clark
  7. Don Doe

我一直在尝试设计一个SQL Select语句,该语句将只检索具有某些相似性的记录(分数待定(。在上面的例子中,预期的查询应该返回行1,2,5,6和8。我尝试过查看MATCH AGAINSTLEVENSHTEIN,但这些函数在提供输入的搜索中起作用。在我的情况下,没有提供任何输入。我正在努力实现的是检测整个表中的重复记录。

您需要进行自联接来比较记录对。这是一把小提琴: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)是您选择的比较函数。你可以使用字符串之间的Levenstein距离。或者您可以使用SOUNDEX(a.name) = SOUNDEX(b.name)。或者任何其他可以进行模糊比较的东西。

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

最新更新