在WHERE语句中使用pl / sql输出

时间:2013-02-01 15:51:40

标签: sql levenshtein-distance

我有一个小问题。因此,我使用Levenshtein得分来搜索两个不同表格中街道名称之间超过85%的比较。但是当我在我的WHERE语句中使用我的Levenshtein得分计算时,我得到了输出,例如:

  • 一张桌子上的街道名称:BEAUSITE1ÈREAVENUE& BEAUSITE2ÈMEAVENUE
  • 另一张桌子上的街道名称:BEAU SITE-1ÈREAVENUE& BEAU SITE-2ÈREAVENUE
  • 输出:全部链接,第一个连接第一个和第二个,第二个连接第一个和第二个。

所以我必须使用所有得分计算的最大分数,就像这样:

    DECLARE    
    L_SCORE NUMBER;    
    L_NEW_SCORE NUMBER;    
    L_BEST_MAP varchar2(255);
    CURSOR C_TO_FIND IS    
    SELECT TT_NAME, L_MUNI, R_MUNI    
    FROM Y_TT_NOT_LINKED_STREETS    ;    
    CURSOR C_TOMTOM_STREET (L_MUNI VARCHAR2) IS    
    SELECT STREET_NAME    
    FROM STREET_NAME SN
                JOIN STREET STR ON STR.STREET_ID = SN.STR_STREET_ID
                JOIN ADMINISTRATIVE_AREA_NAME AAN ON AAN.AAR_ADMIN_AREA_ID = STR.AAR_ADMIN_AREA_ID    
    WHERE AAN.ADMIN_AREA_NAME = L_MUNI
                 AND STR.STREET_ID NOT IN (SELECT ROMA_STREET_ID FROM Y_DS_STREETS_LINK);
BEGIN   
FOR S IN C_TO_FIND LOOP
              L_SCORE := 0;
              L_NEW_SCORE := 0;
    FOR R IN C_TOMTOM_STREET(S.L_MUNI) LOOP
                  L_SCORE := PCK$ADDRESSMATCH.GET_LEVENSHTEIN_SCORE(S.TT_NAME,R.STREET_NAME);
                  IF L_SCORE > L_NEW_SCORE  THEN
                     L_NEW_SCORE := L_SCORE ;
                     L_BEST_MAP := R.STREET_NAME ||CHR(9)||TO_CHAR(L_NEW_SCORE);
                  END IF;
    END LOOP;
    IF L_NEW_SCORE > 85 THEN
                 DBMS_OUTPUT.PUT_LINE(S.L_MUNI||CHR(9)||S.TT_NAME||chr(9)||L_BEST_MAP);
    END IF;
    L_NEW_SCORE := 0;   
END LOOP; 
END;

现在问题是,如何在WHERE语句中使用输出,以便我只能与最大的Levenshtein得分链接,并且上述问题不会发生? 以便: 选择 ... 来自...... WHERE(前一个区块代码得分最高)

(或者换句话说,在整整一周做SQL之后我找不到解决方案)

THX! =)

0 个答案:

没有答案