如何在SQL中基于金额和描述匹配两张表的记录
SQL关联Table A和Table B:基于金额+描述模糊匹配的解决方案
我来帮你搞定这个表关联的需求!根据你给出的示例数据,我们需要同时靠金额精确匹配和描述关键词模糊匹配来把两张表的记录对应起来,下面是具体的实现方案:
核心匹配思路
- 优先用
amt字段做精确匹配:毕竟金额是完全一致的,这是最靠谱的关联依据 - 针对
desc字段做模糊匹配:比如包含"SHELL"的描述互相匹配,非SHELL的记录也通过金额+无关键词冲突来匹配
完整SQL脚本
SELECT a.desc AS table_a_description, b.desc AS table_b_description, a.amt AS matching_amount FROM TableA a INNER JOIN TableB b ON a.amt = b.amt AND ( -- 匹配SHELL相关的记录:忽略大小写,两边描述都包含SHELL关键词 (LOWER(a.desc) LIKE '%shell%' AND LOWER(b.desc) LIKE '%shell%') -- 处理非SHELL的记录:金额一致且两边都不含SHELL关键词 OR (LOWER(a.desc) NOT LIKE '%shell%' AND LOWER(b.desc) NOT LIKE '%shell%') ) ORDER BY a.amt;
脚本细节解释
a.amt = b.amt:这是最基础的关联条件,确保两条记录的金额完全相等,避免无关匹配LOWER()+LIKE '%shell%':把描述转成小写后再匹配,避免因为大小写差异(比如SHELL和Shell)导致匹配失败,%是通配符,表示任意字符(包括空)- OR条件分支:专门处理非SHELL的记录,比如你示例里的
Olufemi Oduneye那条,因为金额一致且两边都不含SHELL,所以会被正确关联
扩展建议
如果后续有更多特定的描述匹配规则(比如某类关键词对应另一类),可以直接在AND的括号里添加新的OR分支,比如:
OR (LOWER(a.desc) LIKE '%oduneye%' AND LOWER(b.desc) LIKE '%oduneye%')
这样能让匹配规则更精准,适配更多场景。
内容的提问来源于stack exchange,提问作者lekz
相关产品推荐
相关产品推荐

