我有下表(这是一个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次连接并检查每种可能的大小组合都更好的方法。
谢谢!
答案 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