2013-04-10 81 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

相關問題