【发布时间】:2019-12-18 15:34:00
【问题描述】:
我正在使用 UTL 匹配从两个不同的表中检索匹配的值以及它们的相似程度。我正在筛选 100 个相似点中至少有 90 个的人,因此我可以手动检查这些值是否实际上相同。
由于结果数据太大,我正在处理一些新查询以取出那些肯定是相同值且不需要任何手动检查的值。就像那些 >90% 相似且大小为 9 个字符的。
为了做到这些,我刚刚使用了 WHERE CLAUSE,但现在我想插入一个 CASE STATEMENT,因为我想说明那些包含单词“University”并且不包含有 95% 的相似度不应该出现。
我正在使用的代码似乎正在运行,但这需要很长时间。你知道它是否可以改进(时间)。谢谢!!!
我使用的代码如下:
with consolidate_table as (....)
select
column1, column2,
UTL_MATCH.jaro_winkler_similarity(column1, column2) as jws
from consolidate_table
where UTL_MATCH.jaro_winkler_similarity(column1, column2) >= 90
AND UTL_MATCH.jaro_winkler_similarity(column1, column2) < 100
AND LENGTH (column1) <9
AND column1 = (CASE
WHEN column1 LIKE '%University%'
AND UTL_MATCH.jaro_winkler_similarity(column1, column2) > 94
THEN column1 ELSE NULL
END)
;
【问题讨论】:
标签: sql oracle common-table-expression case-when