【发布时间】:2017-06-19 09:48:28
【问题描述】:
我正在使用Oracle11g,我会比较两个表以查找它们之间匹配的记录。
例子:
Table 1 Table 2
George Micheal
Michael Paul
他们之间的记录“迈克尔”和“迈克尔”匹配,所以他们是很好的记录。
要查看两条记录是否匹配,我使用Oracle 函数utl_match.edit_distance_similarity。
我尝试使用下面的代码,但我遇到了性能问题(它太慢了):
SELECT *
FROM table1
JOIN table2
ON utl_match.edit_distance_similarity(table1.name, table2.name) > 75;
有没有更好的解决方案?
谢谢
【问题讨论】:
-
加入列名。
SELECT t1.* FROM table1 t1 JOIN table2 t2 ON t1.col1 = t2.col1 -
这并未涵盖所有可能的匹配项(参见 Michael 和 Micheal)
-
是的,但它们都不相同。所以你正在寻找或可能匹配。在 tat 情况下,您可以匹配前 3 或 4 个字符并检查。
-
我相信第一步是决定你是否需要
edit_distance_similarity实现的逻辑。如果您确切需要该功能的功能,我相信很难以更有效的方式实现该功能;如果有不同的可能是正确的,请发布您可能需要的逻辑 -
Table1 和 Table2 有多少个不同的名字?总共有多少条目?
标签: sql oracle oracle11g utl-match