如何查询关联B_ID列所有指定值的A_ID列对应值
SQL查询解决方案
核心思路
要筛选出关联了指定B_ID集合中所有值的A_ID,核心逻辑是:
- 先过滤出所有B_ID落在目标集合内的记录
- 按A_ID分组统计匹配的B_ID数量
- 当匹配的去重B_ID数量等于目标集合的元素总数时,该A_ID即为符合要求的结果
具体查询语句
假设你的表名为a_b_mapping,目标B_ID集合为{1,2},查询语句如下:
SELECT A_ID FROM a_b_mapping WHERE B_ID IN (1, 2) GROUP BY A_ID HAVING COUNT(DISTINCT B_ID) = 2;
说明
- 若表中不存在同一个A_ID和同一个B_ID重复关联的记录,可以将
COUNT(DISTINCT B_ID)简化为COUNT(*),查询性能更高 - 更换查询的B_ID集合时,只需要同步修改
IN后的集合值,以及HAVING子句中等号后的数值(即集合的元素个数)即可 - 针对你提供的样例数据执行上述语句,返回结果为
5和9,和预期完全一致
内容的提问来源于stack exchange,提问作者Sumit Dhungana
相关产品推荐
相关产品推荐

