在SQL中查找两个维度之间的字符串相似性

时间:2013-04-10 13:01:52

标签: sql oracle string-comparison data-analysis

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

在表A中,我有一个用户的搜索查询列表,在表B中,我有一个列表,我想要找到一系列搜索查询。为了完成这项工作,我想使用类似于以下的方法:

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

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

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

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

1 个答案:

答案 0 :(得分: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_TABLE行中NAVN匹配QUERY且得分至少为98(满分为100)的行。您可以将98更改为您喜欢的任何阈值。

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