2009-10-11 68 views
0

我有以下SQL查询:SQL 0计数

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_types表的procedure_type_id。

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

我知道这与加入有什么关系..有人可以帮忙吗?

回答

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 
+0

谢谢你解决了!非常感谢格雷格,现在你已经提到过它,这似乎更有意义。 – 2009-10-11 09:35:23

1

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

+0

嘿,这不是帮助我,不知道为什么。 – 2009-10-11 09:59:37