首页 新闻 搜索 专区 学院

一SQL语句,请进

0
[已关闭问题]

现在有两个表:

Info 表和 InfoToCategory表

INFO表的简单结构如下

InfoId int 

Desc text

InfoToCategory表结构如下

InfoId int 
Category varchar(20)

infotocategory表是一对多的关系 也就是一个Info需要对应几个Category 例如我表内容如下

info 表

1000000 desc
1000001 desc

infotocategory表内容如下

1000000 category1
1000000 category2
1000000 category3
1000001 category2

我现在想查询结果如下:同时属于类别category1和category2 的info 也就是查询结果为

100000 desc

但是我实现不了这个查询 希望高手帮帮忙 指点下

bochins的主页 bochins | 初学一级 | 园豆:2
提问于:2010-05-23 12:02
< >
分享
其他回答(3)
0

SELECT * FROM info WHERE InfoId IN (SELECT DISTINCT InfoId FROM infotocategory WHERE  Category IN ('category1','category2'))

 

我没有在SQL中测试,但是应该是没问题,您可以试下,如果数据量很大,您可以优化下,比如后面的select可以取消in,写成两个select然后union all一下

niky | 园豆:207 (菜鸟二级) | 2010-05-23 12:27
这个语句查询出来的结果是Category为'category1'或'category2'的info ,是二者的并集,而不是交集。楼主的意思应该是查询同时满足二者的情况,也就是交集。
支持(0) 反对(0) 上不了岸的鱼 | 园豆:4613 (老鸟四级) | 2010-05-24 11:27
0

楼上的语句有问题;

SELECT * FROM info
Inner Join infotocategory c1 ON info.InfroId=c1.InfoId
Inner Join infotocategory c2 ON info.InfroId=c2.InfoId
WHERE c1.Category ='category1' AND c2.Category ='category2'
上不了岸的鱼 | 园豆:4613 (老鸟四级) | 2010-05-23 13:59
0

select I1.* from  info I1 right join (

select c1.*,c2.* from

(select * from infotocategorywhere  Category ='category1') c1

inner join

(select * from infotocategorywhere  Category ='category2') c2

 on c1.InfoId=c2.InfoId ) I2

on I2.InfoId=I1.InfoId

深水的猫 | 园豆:110 (初学一级) | 2010-05-23 17:33
0

select * from Info where infoid in (
(select infoid from infotocategory  where category='category1')
intersect
(select infoid from infotocategory  where category='category2')
) 经过测试啦,应该没有问题

怪怪虫 | 园豆:205 (菜鸟二级) | 2010-05-24 11:06
intersect和and的效果一样吧
支持(0) 反对(0) 上不了岸的鱼 | 园豆:4613 (老鸟四级) | 2010-05-24 11:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册