SQL为0计数

时间:2009-10-11 07:51:57

标签: sql mysql

我有以下sql查询:

SELECT DATE(procedures.start) date, name, COUNT(procedure_types.id) count
FROM `procedure_types`
  LEFT OUTER JOIN procedures on procedure_types.id = procedures.procedure_type_id
WHERE (DATE(procedures.start) = '2009-10-24')
GROUP BY DATE(procedures.start), procedure_types.id
ORDER BY DATE(procedures.start), procedure_types.id

有两个表程序& procedure_types。 过程有procedure_type_id,它指向procedure_types表。

查询执行正常,但我想列出带有count(0)的procedure_types,即使它们在该日期没有被任何程序引用。

我知道这与联接有关。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

您的WHERE子句不包括没有过程的procedure_types。您需要将其移动到JOIN:

SELECT DATE(procedures.start) date, name, COUNT(procedure_types.id) count
FROM `procedure_types`
LEFT OUTER JOIN procedures on procedure_types.id = procedures.procedure_type_id
    AND DATE(procedures.start) = '2009-10-24'
GROUP BY DATE(procedures.start), procedure_types.id
ORDER BY DATE(procedures.start), procedure_types.id

答案 1 :(得分:1)

Left Outer Join将从Procedures表中选择所有记录,并仅匹配Procedure_Types。即使Procedure_Types中没有匹配的记录,您也希望从Procedures中选择所有记录,因此您需要 Right Outer Join 。有关JOINS的详细信息,请参阅this