我有以下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,即使它们在该日期没有被任何程序引用。
我知道这与联接有关。有人可以帮忙吗?
答案 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。