如何在mysql5中编写这种查询?

时间:2011-11-10 05:57:26

标签: mysql sql count 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          

表2


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

我需要选择条件类型为1和groupId 4的每个字母表的table2映射计数。

我写了这种查询,但它没有提取所有字母。那些字母表只有它的提取映射。

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

我该如何编写这种查询?

我需要这种输出。


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

1 个答案:

答案 0 :(得分:1)

通过在where子句中添加typeIdgroupId检查,您可以通过要求所有行在此连接表中具有值来有效地使您的左连接成为内连接。但是,这是的情况。如果将类型和组检查移动到on子句(在连接中),则应获得所需的结果。

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