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

두 테이블에 예가 없으면 예상 한 것을 이해하기 어렵습니다. –

답변

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 
    ); 

이 (100 점 만점) 적어도 98의 점수로 NAVN 경기 QUERYSELECTION_TABLE의 행이 SEARCH_LOG의 행을 반환합니다. 98을 원하는 기준으로 변경할 수 있습니다.

이것은 잠재적으로 모든 행 조합을 조사하기 때문에 "무차별 대입"방식입니다. 따라서, "모범 사례"가 아닐 수도 있지만 여전히 실용적 일 수 있습니다. 성능이 중요한 경우 Oracle Text와 같은보다 정교한 솔루션을 고려할 수 있습니다.

+1

'IN'은 엄격하게 동일하기 때문에'EXIST'를 사용해야합니다 :'EXISTS (SELECT NULL FROM selection_table WHERE ) ' –

+0

물론! 그 점을 지적 해 주신 고마워요 @ VincentMalgrat. 그에 따라 대답을 편집했습니다. –

+0

질문을 지적하고 수정 해 주셔서 감사합니다. – olovholm

관련 문제