Как написать такой запрос в mysql5? - PullRequest
0 голосов
/ 10 ноября 2011

У меня есть две таблицы.

table1


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

table2


    <b>did</b>    <b>aid</b>    <b>typeId</b>   <b>groupId</b>   <b>description</b>  
    1       1      3         4        apple description
    2       2      3         4        ffdadfdfd
    3       3      5         6        fdsfsdafasdf

Мне нужно выбрать количество отображений table2 для каждого алфавита с условием typeId 3 и groupId 4.

Я написал такой запрос, но он не выбирает весь алфавит.У этих алфавитов есть отображение, которое только его выборка.

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

Как мне написать запрос такого типа?

Мне нужен такой вывод.


    <b>alphabet</b>   <b>Count</b>
     A          2
     B          0
     C          0
     F          0 .. etc
   

1 Ответ

1 голос
/ 10 ноября 2011

Добавляя проверки typeId и groupId в предложении where, вы фактически превращаете свое левое соединение во внутреннее соединение, требуя, чтобы все строки имели значения в этой объединенной таблице. Однако, это не случай здесь. Если вы переместите проверки типа и группы в предложение 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
...