SQL如何实现两张主键相似但带额外字符的表的Join关联匹配
问题解答
完全可以通过LIKE匹配实现两张表的关联,只需要调整JOIN的关联条件,判断表2的uidy字段包含表1cd字段的完整值即可,修改后的SQL如下:
select tbl1.cd, tbl1.nm, tbl1.vend_typ_id, tbl2.uidy, tbl2.addr_l1, tbl2.addr_l2, tbl2.addr_city, tbl2.addr_ctry, tbl2.addr_nm, tbl2.addr_stae, tbl2.addr_zpcd from table1 tbl1 inner join table2 tbl2 on tbl2.uidy like concat('%', tbl1.cd, '%')
使用该方案有几个需要注意的点:
- 准确性前提是表1的cd值不会出现在表2uidy字段的无关片段中。比如你示例中的主键是固定格式的C开头加9位数字,只要不会出现其他无关内容刚好和该格式重合,就不会出现误匹配。
- 如果需要更高的匹配精度,可以结合数据库的正则匹配功能实现,比如限定主键前后都是分隔符&,以MySQL为例,关联条件可以写成
tbl2.uidy regexp concat('[&]', tbl1.cd, '[&]'),进一步降低误匹配概率。 - 该方案的缺陷是关联时无法利用表2uidy字段的索引,数据量较大时查询性能会远低于等值关联。如果是高频查询或者表2数据量在百万级以上,建议提前清洗表2数据,把需要的主键值提取出来单独存储为一个字段,再做等值关联性能会好很多。
内容的提问来源于stack exchange,提问作者helpmeplease
相关产品推荐
相关产品推荐

