从映射表中获取数据

时间:2014-01-09 06:28:38

标签: mysql sql select join group-by

我有一个像这样的表结构:

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)。 有人可以帮我查询一下吗?

1 个答案:

答案 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;

检查SQL FIDDLE DEMO

<强>输出

| BUNDLE_ID |
|-----------|
|         8 |