Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1373598
  • 博文数量: 112
  • 博客积分: 7112
  • 博客等级: 少将
  • 技术积分: 1299
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-31 16:27
文章分类

全部博文(112)

文章存档

2011年(19)

2010年(20)

2009年(16)

2008年(20)

2007年(37)

分类: Oracle

2010-08-02 09:49:58

今天做客户项目时遇到一个sql语句不会写,总结一下,表结构如下:

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

虽然这个问题看起来不是很复杂,也有别的办法可以实现,研究了半天发现这种用法既快速又简单。

阅读(1809) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~