日期:2014-05-17  浏览次数:21006 次

oracle的联表查询
有表a,b ,下面是一些数据
select * from a;
id name namecode ids
1 w 1w 11
2 s 2s 22
3 c 3c 33
4 d 4d 33

select * from b;
id name vid ids
1 w 11 11
2 s 22 22
3 c 33 33
4 d 33 33

联合查询结果
select * from a,b where a.ids=b.ids

id name namecode ids id name vid ids
1 w 1w 11 1 w 11 11
2 s 2s 22 2 s 22 22  
3 c 3c 33 3 c 33 33  
4 d 4d 33 3 c 33 33  
3 c 3c 33 4 d 33 33  
4 d 4d 33 4 d 33 33  

我想根据b表的vid字段把a 表的数据分组,结果为
select count(a.id),b.vid from a,b where a.ids=b.ids group by b.vid  
count(a.id) ids
1 11
1 22
4 33
但是下面才是我想要的结果:
count(a.id) ids
1 11
1 22
2 33
想了很久,都没想出要怎么解决,不知哪位大侠能帮帮我?

------解决方案--------------------
有表a,b ,下面是一些数据
select * from a;
id name namecode ids
1 w 1w 11
2 s 2s 22
3 c 3c 33
4 d 4d 33

select * from b;
id name vid ids
1 w 11 11
2 s 22 22
3 c 33 33
4 d 33 33

联合查询结果
select * from a,b where a.ids=b.ids

id name namecode ids id name vid ids
1 w 1w 11 1 w 11 11
2 s 2s 22 2 s 22 22
3 c 3c 33 3 c 33 33
4 d 4d 33 3 c 33 33
3 c 3c 33 4 d 33 33
4 d 4d 33 4 d 33 33 


根据以上的表 33有4个,结果是4个很正常,你可以对a.id排重的话试试

------解决方案--------------------
SQL code

select count(id),b_vid from
(
select a.*,b.vid b_vid from a,b where a.ids=b.ids
minus
null,null,null,null,null
)
goup by b_vid

------解决方案--------------------
select count(id),vid from (
select distinct a.id,b.vid from a,b where a.ids=b.ids) group by vid