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

MySQL如何使用正则匹配实现两个表casenum字段的关联查询

MySQL跨表casenum字段匹配方案

核心思路是从对方系统表X的casenum字段中提取出中间的纯数字部分,再和我方系统表Y的casenum字段做等值匹配,共有两种常用实现方案:

方案1:字符串函数截取(推荐,性能更高)

如果对方casenum格式固定为「首字母C+数字段+横杠后缀」(如C10972-02),优先用原生字符串截取函数,执行效率远高于正则匹配,适合大数据量场景:

-- 关联查询获取匹配的Y表id
SELECT 
  Y.id,
  X.casenum AS 对方系统casenum,
  Y.casenum AS 我方系统casenum
FROM X
INNER JOIN Y 
  ON Y.casenum = SUBSTRING(SUBSTRING_INDEX(X.casenum, '-', 1), 2)

函数逻辑说明:

  • SUBSTRING_INDEX(X.casenum, '-', 1):提取casenum中第一个横杠前的内容,示例输入C10972-02会得到C10972
  • SUBSTRING(..., 2):从第2位开始截取字符串,去掉首字母C,得到纯数字段10972

方案2:正则提取(兼容性强,适合格式不固定场景)

如果对方casenum前缀不固定、或者有其他非数字前缀干扰,可以用正则提取第一个连续数字串匹配,MySQL 8.0及以上版本支持:

SELECT 
  Y.id,
  X.casenum AS 对方系统casenum,
  Y.casenum AS 我方系统casenum
FROM X
INNER JOIN Y 
  ON Y.casenum = REGEXP_SUBSTR(X.casenum, '[0-9]+')

注意事项

  • 大数据量查询时,提前给Y表的casenum字段创建索引,可大幅提升关联查询效率
  • 正式执行前可以先测试提取逻辑是否正确,避免匹配错误,测试语句如下:
    -- 测试X表casenum提取结果
    SELECT casenum, SUBSTRING(SUBSTRING_INDEX(casenum, '-', 1), 2) AS 提取的数字段 FROM X LIMIT 100;
    
  • MySQL 5.x版本不支持REGEXP_SUBSTR函数,优先使用方案1即可。

内容的提问来源于stack exchange,提问作者fiona222

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:45:03