如何从T2表中查找与T3表值的最佳匹配项?
查找最长前缀匹配的SQL解决方案
需求:从T2表中找出与T3表中值匹配的最长前缀(即最佳匹配项),示例测试数据中T3的441449729804对应的最佳匹配为T2中的441。
测试表结构与数据
create table t3 (rc varchar2(20)); create table t2 (rcs varchar2(20)); insert into T3 values ('441449729804'); insert into T2 values ('44'); insert into T2 values ('441'); commit;
解决方案
方法1(Oracle 12c及以上版本)
通过关联表筛选前缀匹配记录,按前缀长度倒序后取第一条:
SELECT t2.rcs FROM t2 JOIN t3 ON t3.rc LIKE t2.rcs || '%' ORDER BY LENGTH(t2.rcs) DESC FETCH FIRST 1 ROW ONLY;
方法2(Oracle旧版本兼容)
使用子查询结合ROWNUM实现:
SELECT rcs FROM ( SELECT t2.rcs FROM t2 JOIN t3 ON t3.rc LIKE t2.rcs || '%' ORDER BY LENGTH(t2.rcs) DESC ) WHERE ROWNUM = 1;
逻辑说明
t3.rc LIKE t2.rcs || '%':判断T3的字符串是否以T2的字符串作为前缀ORDER BY LENGTH(t2.rcs) DESC:将匹配到的记录按前缀长度从长到短排序,确保最长匹配排在最前FETCH FIRST 1 ROW ONLY/ROWNUM = 1:获取排序后的第一条记录,即为所需的最佳匹配项
内容的提问来源于stack exchange,提问作者sachin vaidya
相关产品推荐
相关产品推荐

