0

我有两个表,我想找到可以在其中一个表中找到值以及它们在第二个表中的位置的匹配项。

在表 AI 中列出了用户的搜索查询,在表 BI 中列出了我想要查找的搜索查询的列表。为了完成这项工作,我想使用类似于以下的方法:

SELECT UTL_MATCH.JARO_WINKLER_SIMILARITY('shackleford', 'shackelford') FROM DUAL

我使用了这种方法,但它不起作用,因为它可能是查询和选择中的名称之间的差异。

SELECT query FROM search_log WHERE query IN (SELECT navn FROM selection_table);

是否有通过查询查找相似性的最佳实践方法?

4

1 回答 1

2

一种方法可能是这样的:

SELECT 
    SEARCH_LOG.QUERY
FROM 
    SEARCH_LOG
WHERE 
    EXISTS
    (
        SELECT 
            NULL 
        FROM 
            SELECTION_TABLE
        WHERE
            UTL_MATCH.JARO_WINKLER_SIMILARITY(SEARCH_LOG.QUERY, SELECTION_TABLE.NAVN) >= 98
    );

这将返回SEARCH_LOGSELECTION_TABLEwhere 中NAVN匹配QUERY至少 98 分(满分 100 分)的行。您可以将 98 更改为您喜欢的任何阈值。

这是一种“蛮力”方法,因为它可能会查看所有行组合。因此,它可能不是“最佳实践”,但它可能仍然是实用的。如果性能很重要,您可以考虑使用更复杂的解决方案,例如 Oracle Text。

于 2013-04-10T13:53:24.940 回答