2013-04-10 155 views
0

我有两个表格,我想查找哪些值可以在其中一个表格中找到并且它们位于第二个表格中。在SQL中查找两个维度之间的字符串相似度

在表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

没有数据在你的两个表中的例子很难理解你的期望。 – 2013-04-10 13:36:52

回答

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。

+1

你应该使用'EXIST',因为'IN'严格等于:'EXISTS(SELECT NULL FROM selection_table WHERE )' – 2013-04-10 13:55:58

+0

当然!感谢@VincentMalgrat指出了这一点。我已经编辑了相应的答案。 – 2013-04-10 14:02:15

+0

感谢您指出并纠正问题。 – olovholm 2013-04-10 16:03:06

相关问题