创建一个新的 table 列,其中最接近另一个 table 的字符串匹配

Create a new table column with closest string match from another table

我有两个位置名称列表,拼写、大小写等略有不同

我正在尝试将第一个列表中的每个网站与第二个列表中最相似的网站进行匹配。

SELECT name1, name2 FROM table1, table2
    WHERE levenshtein(name1, name2) < 3

是正确的,但抛出了一些误报。如果我可以 select 具有最小 Levenshtein 距离的记录,那么其中的大部分都可以避免。

在 Python 我想做的事:

for row1 in table1:
    min_dist = 100
    for row2 in table2:
        dist = levenshtein(row1.name, row2.name)
        if dist < min_dist:
            min_dist = dist
            closest_name = row2.name
    row1.newcolumn = closest_name

这在 postgresql 中可行吗?

如果我对你的问题的理解正确,对于每个 name1,你正在寻找最接近的 name2。这可以通过子查询来完成,比如:

SELECT
    name1,
    (SELECT name2
     FROM table2
     WHERE levenshtein(name1, name2) < 3
     ORDER BY levenshtein(name1, name2)
     LIMIT 1
    )
FROM table1

我假设你自己定义了 levenshtein