Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 选择相似的记录 请考虑以下记录: 无名氏 戈恩·多伊 彼得·阿蒙德 李安娜 李丹娜 西蒙·克拉克 多伊老头子_Mysql - Fatal编程技术网

Mysql 选择相似的记录 请考虑以下记录: 无名氏 戈恩·多伊 彼得·阿蒙德 李安娜 李丹娜 西蒙·克拉克 多伊老头子

Mysql 选择相似的记录 请考虑以下记录: 无名氏 戈恩·多伊 彼得·阿蒙德 李安娜 李丹娜 西蒙·克拉克 多伊老头子,mysql,Mysql,我一直在试图找到一个SQLSELECT语句,它将只检索具有某些相似性的记录(分数待定)。在上面的示例中,预期的查询应该返回第1、2、5、6和8行。我试过查看匹配,LEVENSHTEIN,但这些函数在提供输入的搜索中起作用。在我的例子中,没有提供任何输入。我试图完成的是在我的表中检测重复记录。您需要进行自连接以比较记录对。这是一把小提琴: 选择a.name,b.name 来自tbl a 在a.name>b.name上加入tbl b 其中比较(a.name,b.name)

我一直在试图找到一个SQLSELECT语句,它将只检索具有某些相似性的记录(分数待定)。在上面的示例中,预期的查询应该返回第1、2、5、6和8行。我试过查看
匹配
LEVENSHTEIN
,但这些函数在提供输入的搜索中起作用。在我的例子中,没有提供任何输入。我试图完成的是在我的表中检测重复记录。

您需要进行自连接以比较记录对。这是一把小提琴:

选择a.name,b.name
来自tbl a
在a.name>b.name上加入tbl b
其中比较(a.name,b.name)<阈值
比较(a,b)
是您选择的比较函数。可以在字符串之间使用。或者您可以使用
SOUNDEX(a.name)=SOUNDEX(b.name)
。或者任何你想要的模糊比较


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

请参见:Hi Jones。这是可行的,但我尝试了一个大数据集(2000条记录),40分钟后,查询仍在运行。有没有办法让查询更便宜?Levenshtein是最毛茸茸的函数之一。您运行了2000 x 2000/2次,速度不快。也许你可以使用
WHERE ABS(LEN(a.name)-LEN(b.name))<5和levenshtein()
来简化搜索。非常感谢@O.Jones!我在上面使用了相同的概念,唯一的区别是我没有使用
LEVENSHTEIN
,而是在
Where
子句中使用了
LEFT(a.name,4)=LEFT(b.name)
,这样它可以显示具有相同起始和结束字符串的记录。它对我有用。
  SELECT a.name, b.name
    FROM tbl a
    JOIN tbl b ON a.name > b.name
   WHERE compare(a.name, b.name) < threshold