0

好吧,我有 3 张桌子:

待定1:

tb1_id PK
tb1_name

待定2:

tb2_id PK
tb1_id FK

待定3:

tb3_id PK
tb2_id FK

我得到了这个查询:

select a.tb1_nome
      ,b.tb2_id
      ,count(c.tb2_id) as lins 
 from tb1 a 
      left join tb2 b on a.tb1_id=b.tb1_id 
      left join tb3 c on b.tb2_id=c.tb2_id 
 group by b.tb2_id order by a.tb1_id desc

但它不会返回 tb1 的所有行。

4

2 回答 2

1

我有 3 个表,我需要获取与 tb1 匹配的所有 tb2 行,并显示与 tb2 匹配的所有 tb3 行的计数

我认为你只需要使用INNER JOIN而不是LEFT JOIN. INNER JOIN选择在连接的表上有记录的行。试一试,稍后再反馈:)

SELECT  a.tb1_name,
        b.tb2_id,
        COUNT(c.tb2_id) TotalCount
FROM    tb1 a 
          INNER JOIN tb2 b
             on a.tb1_id = b.tb1_id
          INNER JOIN tb3 c
             on b.tb2_id = c.tb2_id
GROUP BY a.tb1_name, b.tb2_id
ORDER BY a.tb2_id DESC
于 2012-07-03T23:49:29.020 回答
0

当你这样做

left join tb2 b on a.tb1_id=b.tb1_id

也许你有一个错字,因为 b 只有 tb2_id...没有 tb1_id

此外,如果您需要获取所有 tb1 行,即使 tb2 上没有匹配结果,请考虑使用外连接。

于 2012-07-03T22:56:19.663 回答