多对多关系中基于关联表的特定条件SQL查询求助
多对多中间表查询解决方案
通用方案:关联3个不同interval_id的记录
如果只要求specific_id关联任意3个不同的interval_id,可以通过分组统计筛选目标记录,再关联specifics表获取speed字段:
SELECT s.speed FROM specifics s JOIN specifics_intervals si ON s.id = si.specific_id GROUP BY s.id, s.speed HAVING COUNT(DISTINCT si.interval_id) = 3;
关键逻辑说明:
GROUP BY s.id, s.speed:按specifics表的主键和speed字段分组,确保每个specific_id仅返回一条speed结果HAVING COUNT(DISTINCT si.interval_id) = 3:筛选出关联的不同interval_id数量恰好为3的specific_id
指定具体3个interval_id的方案
如果需要specific_id恰好关联指定的3个interval_id(比如示例中的37、38、39),可以使用以下语句:
SELECT s.speed FROM specifics s JOIN specifics_intervals si ON s.id = si.specific_id WHERE si.interval_id IN (37, 38, 39) GROUP BY s.id, s.speed HAVING COUNT(DISTINCT si.interval_id) = 3;
关键逻辑说明:
WHERE si.interval_id IN (37, 38, 39):先限定统计范围为指定的三个interval_id- 结合
HAVING COUNT(DISTINCT ...) =3,确保该specific_id同时关联了这三个指定的interval_id
内容的提问来源于stack exchange,提问作者Killian M.
相关产品推荐
相关产品推荐

