2012-07-03 3 views
0

Eh bien, je suis 3 tables:Problème avec MySQL multiple gauche rejoindre et groupe par

TB1:

tb1_id PK 
tb1_name 

TB2:

tb2_id PK 
tb1_id FK 

TB3:

tb3_id PK 
tb2_id FK 

et je suis arrivé cette requête:

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 

mais il n'a pas renvoie toutes les lignes de TB1.

Répondre

1

i got 3 tables je dois obtenir toutes les lignes de TB2 qui correspond à TB1 et montrent le nombre de toutes les lignes de TB3 qui correspond à TB2

Je pense que vous seulement besoin d'utiliser INNER JOIN au lieu de LEFT JOIN. INNER JOIN sélectionne les lignes qui ont des enregistrements sur la table jointe. Essayez et ayez un retour plus tard :)

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 
0

Lorsque vous faites

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

peut-être vous avez une faute de frappe parce que b a tb2_id seulement ... pas tb1_id

En outre, si vous avez besoin pour obtenir toutes les lignes TB1 même sans résultat correspondant sur TB2 , pensez à utiliser la jointure externe.