分类: Oracle
2010-08-02 09:49:58
cat表:(存放分类的表)
categoryid catname
1 cat1
2 cat2
3 cat3
catpro表:(产品和分类之间的关系表)
catid proid
1 2
1 3
2 2
pro表:(产品信息表)
proid proname
1 pro1
2 pro2
3 pro3
一般情况下:
比如我传一个catid为1,2的参数进来
sql语句里应该是 select * from pro inner join catpro on pro.proid=catpro.proid where catpro.catid in (1,2)
查询结果:
2 pro2
3 pro3
这样查出来的是并集 查出来的产品属于分类1或2
而现在的问题是:
想查出来交集 查出来的产品属于分类1和2
后来经过研究发现having count 和 group by 组合使用可以实现此功能,语句如下
select proid from catpro
where catid in (1,2) group by proid having count(proid) =2
查询结果:
2 --这说明只有产品2吻合条件,它既属于类型1也属于类型2
虽然这个问题看起来不是很复杂,也有别的办法可以实现,研究了半天发现这种用法既快速又简单。