SQL多个连接在同一个表上,以便实体设置了所有字段

时间:2012-10-18 16:17:08

标签: sql join relational-database

我有下表(这是一个bannerid列表和每个的可用大小):

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

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

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

bannerid
--------
3

由于bannerid 3具有上述所有可能的大小(1和2缺少几个大小)。

实现这一目标的好方法是什么?我假设有一种比在同一个表上进行7次连接并检查每种可能的大小组合都更好的方法。

谢谢!

3 个答案:

答案 0 :(得分: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 ;

答案 1 :(得分:1)

   SELECT bannerid
     FROM tbl
 GROUP BY bannerid
   HAVING COUNT(bannersize) = (SELECT COUNT(DISTINCT bannersize) FROM tbl)

如果您需要bannerid完整集,无论表格中是否存在bannersizes

都可以使用。

答案 2 :(得分:0)

select bannerid
from t
group by bannerid
where count(distinct bannersize) = 7