我有一个像这样的表结构:
bundle_id|service_id
8|1
8|2
8|3
9|1
9|4
10|1
10|2
10|3
10|4
10|5
现在,我想查询该表以获取具有特定服务集的最佳包。
E.g。如果我想获取具有服务1,2和3的包,那么它应该返回8(而不是10)。 有人可以帮我查询一下吗?
答案 0 :(得分:1)
试试这个:
SELECT bundle_id
FROM mappings
WHERE service_id IN (1, 2, 3)
GROUP BY bundle_id HAVING COUNT(DISTINCT service_id) = 3
ORDER BY bundle_id LIMIT 1;
修改强>
SELECT m.bundle_id
FROM mappings m
INNER JOIN (SELECT bundle_id, COUNT(DISTINCT service_id) serviceIdCnt
FROM mappings GROUP BY bundle_id
) A ON m.bundle_id = A.bundle_id
WHERE m.service_id IN (1, 2, 3)
GROUP BY m.bundle_id HAVING COUNT(DISTINCT m.service_id) = 3
ORDER BY A.serviceIdCnt LIMIT 1;
<强>输出强>
| BUNDLE_ID |
|-----------|
| 8 |