首页 新闻 搜索 专区 学院

sql 怎么写?

0
[已解决问题] 解决于 2012-11-20 09:50

我有三个表

tbA 字段:A_ID,A_Name

tbB 字段 B_ID,B_A_ID

tbC 字段 C_ID,C_A_ID

一个左联接得到A的记录并且得到A_ID相应的在B中存在的条数

SELECT dbo.tbA.A_ID, COUNT(dbo.tbB.B_A_ID) 
       AS ActionCount
FROM   tbA left join tbB on A_ID =B_A_ID
group by dbo.tbA.A_ID

以上可以得到正确的,A_ID相应的在B中存在的条数

如果tbA和tbC同上如上的一个做连接也可以得到相同的想要的结果

但是为什么如下的sql得不到正确的A_ID在tbC中相应的条数呐?

SELECT  dbo.tbA.A_ID, COUNT(dbo.tbB.B_A_ID) 
        AS ActionCount, COUNT(dbo.tbC.C_ID) AS OpinionCount
FROM    tbA left join tbB on A_ID = B_A_ID
left join tbC  on A_ID = C_A_ID
group by dbo.tbA.A_ID

而A_ID在tbC中相应的条数会与A_ID相应的在B中存在的条数一样?

怎么样写才可以得到正确值?

 

koi的主页 koi | 初学一级 | 园豆:2
提问于:2012-11-19 23:23
< >
分享
最佳答案
0

第二个查询是三个矩阵相乘,当然得不出a在c中的条数了
如果tbA中A_ID是主键,可以这样

select a.A_ID,ActionCount,OpinionCount
from tbA as a
left join (select B_A_ID,count(1) as ActionCount from tbB group by B_A_ID) as b on a.A_ID=b.B_A_ID
left join (select C_A_ID,count(1) as OpinionCount from tbC group by C_A_ID) as c on a.A_ID=c.C_A_ID
奖励园豆:5
飞来飞去 | 老鸟四级 |园豆:2057 | 2012-11-20 00:06

三个矩阵相乘? 有没好理解点的例子

koi | 园豆:2 (初学一级) | 2012-11-20 00:11

@koi: 我记错了,矩阵乘法不是这么乘的。。大概意思如果A_ID=1的时候,tbB有2行A_ID=1,tbC有3行A_ID=1,那你第二个查询方式会查出来2*3=6行

飞来飞去 | 园豆:2057 (老鸟四级) | 2012-11-20 09:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册