2011-11-10 3 views
0

J'ai deux tables.Comment écrire ce genre de requête dans mysql5?

table1

 

    aid alphabet  Name 
    1  A   Apple 
    2  A   Air 
    3  B   Ball 
    4  C   Cat 
    5  C   Cow 
    6  F   Footbal 
    7  G   God   

table2

 

    did aid typeId groupId description 
    1  1  3   4  apple description 
    2  2  3   4  ffdadfdfd 
    3  3  5   6  fdsfsdafasdf 

je dois sélectionner le nombre de cartographie table2 de chaque alphabet avec une condition typeId 3 et groupId 4.

J'ai écrit ce genre d'une requête mais ce n'est pas aller chercher tout l'alphabet. Ces alphabets ont la cartographie que son aller chercher.

select a.alphabet, count(did) from table1 a left join table2 b on a.aid=b.aid where b.typeId=3 and b.groupId=4 group by a.alphabet

Comment puis-je écrire ce genre de requête?

J'ai besoin de ce type de sortie.

 

    alphabet Count 
    A   2 
    B   0 
    C   0 
    F   0 .. etc 
+0

Je suppose changer 'count (offre)' 'à count (b.did) comme Count' devrait fixer votre requête – Teneff

+0

désolé, je ne pouvais pas en position ce que vous voulez dire .. :( – learner

+0

@Teneff. Par erreur j'ai tapé l'enchère .. désolé son ne donnant pas le bon résultat – learner

Répondre

1

En ajoutant les typeId et groupId contrôles dans la clause where, vous faites votre gauche efficacement rejoindre dans une jointure interne, en exigeant que toutes les lignes ont des valeurs dans ce tableau joint. Cependant, c'est pas le cas ici. Si vous déplacez les vérifications de type et de groupe vers la clause on (dans la jointure), vous devriez obtenir le résultat souhaité.

select 
    a.alphabet, 
    count(b.did) 
from 
    table1 a 
    left join table2 b 
     on a.aid=b.aid and b.typeId=3 and b.groupId=4 
group by 
    a.alphabet 
+0

il n'y a pas de colonne 'bid' dans la description de la table – Teneff

+0

Merci, corrigé. –