如何用SQL实现用一张表的字段值批量统计另一张表匹配记录数
实现方案
直接通过两表关联+分组聚合即可实现,无需手动拼接多条查询语句,通用SQL写法如下:
SELECT a.name, COUNT(DISTINCT bt.id) AS match_count FROM accounts a LEFT JOIN -- 请替换为你实际需要统计的业务表名称 business_table bt ON bt.code LIKE CONCAT('%', a.name, '%') GROUP BY a.name -- 可选:按匹配数量倒序排列方便查看结果 ORDER BY match_count DESC;
说明
- 用
LEFT JOIN关联可以保证accounts表中所有的name都出现在结果集中,即使没有匹配的业务记录也会显示统计值为0,不会遗漏数据。如果不需要展示无匹配的name,可将LEFT JOIN改为INNER JOIN过滤。 - 关联条件用
CONCAT('%', a.name, '%')动态拼接模糊匹配通配符,和你原有单条查询的%$string$%逻辑完全一致。部分数据库(如Oracle、PostgreSQL)也可替换为bt.code LIKE '%' || a.name || '%'写法,效果相同。 - 若
accounts.name中存在%、_这类SQL LIKE内置通配符,需要提前做转义处理,避免匹配结果不符合预期。 - 若业务表数据量较大,可给
code字段建立前缀索引优化查询速度。
内容的提问来源于stack exchange,提问作者mcl147
相关产品推荐
相关产品推荐

