You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 08:15:31