跨表匹配查询需求:从Table1提取与Table2匹配的记录
实现Table1与Table2的模糊匹配筛选
根据你的需求和示例数据,匹配逻辑是Table1的Column b与Table2的Column A存在互相包含的关系(即一方是另一方的子串)。以下是满足需求的SQL实现:
SELECT t1.`Column b` AS result FROM Table1 t1 WHERE EXISTS ( SELECT 1 FROM Table2 t2 WHERE t2.`Column A` LIKE CONCAT('%', t1.`Column b`, '%') OR t1.`Column b` LIKE CONCAT('%', t2.`Column A`, '%') );
代码说明
- 主查询从
Table1中获取数据,最终输出符合条件的Column b并命名为result EXISTS子查询用于判断当前Table1的记录是否在Table2中存在匹配项:t2.Column ALIKE CONCAT('%', t1.Column b, '%'):检查Table2的Column A是否包含Table1的Column bt1.Column bLIKE CONCAT('%', t2.Column A, '%'):检查Table1的Column b是否包含Table2的Column A
- 只要满足其中一个包含条件,该
Table1的记录就会被筛选出来
与参考代码的区别
你提供的参考代码是从Table2出发,标记每条记录是否与Table1匹配,而需求是从Table1筛选符合条件的记录,因此需要调整查询的主表和判断逻辑。
验证示例数据
执行上述SQL后,会得到你期望的结果:
| result |
|---|
| 12345 |
| 567890 |
| 78905 |
- 12345:被Table2的123456包含
- 567890:包含Table2的56789
- 78905:被Table2的789056包含
- 1256:与Table2的所有Column A都无包含关系,因此被排除
内容的提问来源于stack exchange,提问作者vid
相关产品推荐
相关产品推荐

