我有两个表,我想找到匹配项,其中的值可以在其中一个表中找到,并且它们位于第二个表中。
在表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);
是否有通过查询查找相似性的最佳实践方法?
答案 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_LOG
中SELECTION_TABLE
行中NAVN
匹配QUERY
且得分至少为98(满分为100)的行。您可以将98更改为您喜欢的任何阈值。
这是一个强大的力量"方法,因为它可能会查看所有行组合。因此,它可能不是最佳实践",但它可能仍然是实用的。如果性能很重要,您可以考虑使用更复杂的解决方案,如Oracle Text。