0

我有下表(它是每个横幅和可用尺寸的列表):

bannerid, bannersize
--------------------
1, 16
1, 32
1, 128
2, 16
2, 32
2, 128
2, 256
2, 512
3, 16
3, 32
3, 64
3, 128
3, 256
3, 512
3, 1024

我需要能够生成具有所有可能大小(16、32、64、128、256、512、1024)的所有bannerid的列表

所以在这个例子中,结果应该是:

bannerid
--------
3

由于bannerid 3 具有上述所有可能的尺寸(1 和2 缺少一些尺寸)。

实现这一目标的好方法是什么?我认为有比在同一张表上执行 7 次连接并检查每个可能的大小组合是否存在更好的方法。

谢谢!

4

3 回答 3

3
select bannerid, count(bannersize) 
from tbl_banners  
where bannersize in (16, 32, 64, 128, 256, 512, 1024) 
group by bannerid  
having count(bannersize) = 7 ;
于 2012-10-18T16:22:54.157 回答
1
   SELECT bannerid
     FROM tbl
 GROUP BY bannerid
   HAVING COUNT(bannersize) = (SELECT COUNT(DISTINCT bannersize) FROM tbl)

如果您需要bannerid完整的集合,无论表中存在什么,这都有效bannersizes

于 2012-10-18T16:23:47.377 回答
0
select bannerid
from t
group by bannerid
where count(distinct bannersize) = 7
于 2012-10-18T16:20:59.397 回答