如何用SQL查询与指定ID_House列表全匹配的共同ID_Postman
SQL查询实现方案
核心思路
通过分组统计匹配目标房屋列表的去重房屋数量,判断是否等于列表总长度,筛选出关联所有目标房屋的快递员ID。
实现代码
假设你的数据表名为delivery_relation,可参考如下SQL编写:
SELECT ID_Postman FROM delivery_relation WHERE ID_House IN ('H1', 'H2', 'H3') -- 此处替换为你需要查询的ID_House列表 GROUP BY ID_Postman HAVING COUNT(DISTINCT ID_House) = 3; -- 此处数值等于上述ID_House列表的元素总数
逻辑说明
WHERE子句先过滤出所有和目标房屋列表相关的记录,排除无关数据- 按
ID_Postman分组后,用COUNT(DISTINCT ID_House)统计每个快递员关联的不重复目标房屋数量 - 只有计数等于目标列表总长度的快递员,才满足关联了列表内所有房屋的要求,会被返回
测试场景验证
- 当查询ID_House列表为
[H1,H2,H3],总长度为3:
过滤后P1关联的去重房屋为H1、H2、H3,计数等于3,符合条件返回P1,与需求一致。 - 当查询ID_House列表为
[H1,H2,H4],总长度为3:
过滤后P1仅关联H1、H2,计数为2;P3仅关联H4,计数为1,均不满足要求,返回空,符合需求。
注意事项
- 如果你的表中存在同一个
ID_Postman和ID_House组合有多条重复记录的情况(如示例中P1和H1存在2条关联记录),必须加DISTINCT去重统计,否则会导致计数错误 - 如果业务上已经保证
ID_Postman+ID_House组合唯一,可去掉DISTINCT提升查询性能
内容的提问来源于stack exchange,提问作者LearnLearnLearn
相关产品推荐
相关产品推荐

