SQL表连接查询:返回billing侧关联计数为1的mt表记录
基于关联计数的业务表筛选实现
基础表定义
涉及两张通过公共字段关联的业务表:
mt table:存储交易数据的业务表,每条交易记录均可通过external_id字段与计费表完成关联匹配billing:计费业务表,同样以external_id作为和交易表的关联匹配字段
核心查询需求
从mt table中筛选并返回满足以下条件的记录:对应当前mt表记录的external_id值,在billing表中匹配到的关联记录总计数恰好为1。
规则验证示例
为明确筛选逻辑,给出两组演示数据的映射关系:
mt table数据内容:- id=1,对应
external_id=444 - id=2,对应
external_id=222 - id=3,对应
external_id=333 - id=4,对应
external_id=111
- id=1,对应
billing数据内容:- id=3,对应
external_id=444 - id=4,对应
external_id=444 - id=5,对应
external_id=333 - id=6,对应
external_id=333 - id=7,对应
external_id=222 - id=8,对应
external_id=111
- id=3,对应
按照筛选规则,上述示例场景下的预期返回结果为mt table中id=2(对应external_id=222)、id=4(对应external_id=111)的条目。匹配判断逻辑为:这两个external_id值在billing表中仅存在1条关联记录,其余两个external_id(444、333)在billing表中均对应2条关联记录,不满足计数为1的筛选要求。
参考实现查询语句
可通过子查询预聚合关联计数、再内连接匹配的方式实现筛选,参考SQL如下:
SELECT mt.* FROM `mt table` mt INNER JOIN ( -- 预统计billing表中每个external_id的关联记录数,仅保留计数为1的有效关联键 SELECT external_id FROM billing GROUP BY external_id HAVING COUNT(*) = 1 ) matched_key ON mt.external_id = matched_key.external_id
该执行逻辑可避免全表关联后再做分组的性能损耗,输出结果与示例预期完全一致。
内容的提问来源于stack exchange,提问作者Jacel
相关产品推荐
相关产品推荐

