获取由另一个表的字段过滤的每个类别的计数

时间:2013-10-24 03:54:52

标签: mysql sql

我有以下结构的表格。

AD_TABLE -

               ID|NAME|CAT_ID|TYPE
               1| car | C0101|Sale
               2|bike | C0201|Want

CAT_TABLE -

              ID   |NAME          |PARENT|LEVEL
              C0100|Vehicle       |C0100 |    0
              C0101|Car           |C0100 |    1
              C0200|Bike/Scooters |C0100 |    1
              C0201|Bike          |C0200 |    2
              C0202|Scooter       |C0200 |    2

我需要从每个类别中获取AD的数量,我已经编写了以下查询。

SELECT `CAT_TABLE`.`ID`,`CAT_TABLE`.`NAME`,`CAT_TABLE`.`LEVEL`,`CAT_TABLE`.`PARENT`, COUNT(`AD_TABLE`.`ID`) 
FROM `CAT_TABLE` 
LEFT JOIN `AD_TABLE` ON `AD_TABLE`.`CAT_ID`=`CAT_TABLE`.`ID`
WHERE (`CAT_TABLE`.`ID`='C0100' OR `CAT_TABLE`.`PARENT`='C0100') AND `AD_TABLE`.`TYPE`='0'
GROUP BY `CAT_TABLE`.`ID`

我正确地得到了每个类别的计数但在包含AD_TABLE . TYPE` ='0'之后,where子句中没有AD的类别被忽略了。即使计数为0,我也需要获得所有类别。

1 个答案:

答案 0 :(得分:1)

试试这个

    SELECT     `CAT_TABLE`.`ID`,`CAT_TABLE`.`NAME`,`CAT_TABLE`.`LEVEL`,`CAT_TABLE`.`PARENT`,      COUNT(`AD_TABLE`.`ID`) 
    FROM       `CAT_TABLE` 
    LEFT JOIN  `AD_TABLE` 
    ON         `AD_TABLE`.`CAT_ID`=`CAT_TABLE`.`ID`
    AND        `AD_TABLE`.`TYPE`='0'  -- Write and here..<br/>
    WHERE      (`CAT_TABLE`.`ID`='C0100' OR `CAT_TABLE`.`PARENT`='C0100')
    GROUP BY   `CAT_TABLE`.`ID`