gpt4 book ai didi

sql - 如何在 Oracle 中使用模糊匹配获得准确的 JOIN

转载 作者:行者123 更新时间:2023-12-01 19:01:15 25 4
gpt4 key购买 nike

我正在尝试将一个表中的一组县名称与另一个表中的县名称连接起来。这里的问题是,两个表中的县名都没有标准化。它们的数量不同;而且,它们可能并不总是以相似的模式出现。例如,“表A”中的县“SAINT JOHNS”可以表示为“表B”中的“ST JOHNS”。我们无法预测它们的共同模式。

这意味着,我们在加入时不能使用“等于”(=) 条件。因此,我尝试使用 oracle 中的 JARO_WINKLER_SIMILARITY 函数加入他们。我的左外连接条件如下:

Table_A.State = Table_B.State 
AND UTL_MATCH.JARO_WINKLER_SIMILARITY(Table_A.County_Name,Table_B.County_Name)>=80

在对结果进行一些测试后,我给了该指标 80 分,这似乎是最佳的。在这里,问题是我在加入时遇到了“误报”。例如,如果同一州下有一些名称相似的县(例如“BARRY”和“BAY”),如果度量为 >=80,则它们将被匹配。这会创建不准确的连接数据集。谁能建议一些解决办法吗?

谢谢,数字AV

最佳答案

Can you plz help me to build a query that will lookup Table_A for each record in Table B/C/D, and match against the county name in A with highest ranked similarity that is >=80

Oracle 设置:

CREATE TABLE official_words ( word ) AS
SELECT 'SAINT JOHNS' FROM DUAL UNION ALL
SELECT 'MONTGOMERY' FROM DUAL UNION ALL
SELECT 'MONROE' FROM DUAL UNION ALL
SELECT 'SAINT JAMES' FROM DUAL UNION ALL
SELECT 'BOTANY BAY' FROM DUAL;

CREATE TABLE words_to_match ( word ) AS
SELECT 'SAINT JOHN' FROM DUAL UNION ALL
SELECT 'ST JAMES' FROM DUAL UNION ALL
SELECT 'MONTGOMERY BAY' FROM DUAL UNION ALL
SELECT 'MONROE ST' FROM DUAL;

查询:

SELECT *
FROM (
SELECT wtm.word,
ow.word AS official_word,
UTL_MATCH.JARO_WINKLER_SIMILARITY( wtm.word, ow.word ) AS similarity,
ROW_NUMBER() OVER ( PARTITION BY wtm.word ORDER BY UTL_MATCH.JARO_WINKLER_SIMILARITY( wtm.word, ow.word ) DESC ) AS rn
FROM words_to_match wtm
INNER JOIN
official_words ow
ON ( UTL_MATCH.JARO_WINKLER_SIMILARITY( wtm.word, ow.word )>=80 )
)
WHERE rn = 1;

输出:

WORD           OFFICIAL_WO SIMILARITY         RN
-------------- ----------- ---------- ----------
MONROE ST MONROE 93 1
MONTGOMERY BAY MONTGOMERY 94 1
SAINT JOHN SAINT JOHNS 98 1
ST JAMES SAINT JAMES 80 1

关于sql - 如何在 Oracle 中使用模糊匹配获得准确的 JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43677725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com