如何使用postgresql在一列中查找类似的值

时间:2016-11-23 06:00:24

标签: sql postgresql


我是SQL的新手,因此我对它的功能并不十分熟悉 所以这是我的问题。
我的下表包含> 100.000公司(让我们称之为'comp'):

id  | title               | name
----+---------------------+--------------
1   | XYZ                 | xyz
----+---------------------+--------------
2   | Smarts              | smarts
----+---------------------+--------------
3   | XYZ LTD             | xyzltd
----+---------------------+--------------
4   | Outsmarts           | outsmarts
----+---------------------+--------------
5   | XYZ Entertainment   | xyzentertainment
----+---------------------+--------------
6   | Smarts Entertainment| smartsentertainment

其中'title'是公司名称,'name'是相同的标题,但是没有空格。 有没有办法找到所有具有相似头衔的公司(使用'title'或'name')?所以,基本上,我想收到:

id  | title               | name
----+---------------------+--------------
1   | XYZ                 | xyz
----+---------------------+--------------
3   | XYZ LTD             | xyzltd
----+---------------------+--------------
5   | XYZ Entertainment   | xyzentertainment
----+---------------------+--------------
2   | Smarts              | smarts
----+---------------------+--------------
6   | Smarts Entertainment| smartsentertainment

相似我的意思是:
1)'XYZ','XYZ LTD'和'XYZ Entertainment'
2)'智能'和'智能娱乐' 但'XYZ Entertainment'与'Smart Entertainment'并不相似,'Smart'与'Outsmarts'不相似。

我尝试了这个并且它不起作用:

final String[] columns = { MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID };
 Cursor imagecursor = getApplicationContext().getContentResolver().query(
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null,
                null, null);

by'not not working'我的意思是说7分钟后它仍然没有给我任何结果。我想,我完全搞砸了 是否有可能找回这些相似之处?

1 个答案:

答案 0 :(得分:2)

您可以尝试Levenshtein distance函数,该函数为您提供从第一个参数获得第二个的编辑次数:

SELECT levenshtein(c1.name, c2.name) AS sim, 0c1.name, c2.name
FROM comp AS c1 JOIN comp AS c2 ON c1.name != c2.name ORDER BY sim DESC;