我有三个表
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中存在的条数一样?
怎么样写才可以得到正确值?
第二个查询是三个矩阵相乘,当然得不出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
三个矩阵相乘? 有没好理解点的例子
@koi: 我记错了,矩阵乘法不是这么乘的。。大概意思如果A_ID=1的时候,tbB有2行A_ID=1,tbC有3行A_ID=1,那你第二个查询方式会查出来2*3=6行