MySQL Left Outer使用连接表中的Count连接,显示所有记录

时间:2010-10-06 17:16:14

标签: mysql count left-join

我正在尝试创建一个查询,其中有来自另一个表的相关记录的计数。我希望“父”记录是否有相关记录(计数)。

SELECT r.region_name, r.region_id, r.abbreviation, r.map_order,
    (IFNULL( COUNT( p.property_id ) , 0 )) AS propertyCount
FROM  `rmp_region` r
LEFT OUTER JOIN  `rmp_property` p 
    ON p.path LIKE CONCAT(  '%/', r.region_id,  '/%' ) 
WHERE p.active =1
AND r.parent_region_id =1
GROUP BY r.region_name, r.region_id, r.abbreviation, r.map_order
ORDER BY r.map_order ASC 

我尝试了不同的变体..但如果计数为零/没有相关记录,我无法显示父记录。

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

您需要将WHERE子句中的“p.active = 1”移动到OUTER JOIN条件中。

以下是您更改的示例:

SELECT r.region_name, r.region_id, r.abbreviation, r.map_order,
    (IFNULL( COUNT( p.property_id ) , 0 )) AS propertyCount
FROM  `rmp_region` r
LEFT OUTER JOIN  `rmp_property` p 
    ON p.path LIKE CONCAT(  '%/', r.region_id,  '/%' ) and p.active =1
WHERE r.parent_region_id =1
GROUP BY r.region_name, r.region_id, r.abbreviation, r.map_order
ORDER BY r.map_order ASC 

答案 1 :(得分:1)

您询问了如何优化它,希望“路径”列上的索引可能会有所帮助。很遗憾,您正在搜索与LIKE CONCAT( '%/', r.region_id, '/%' )匹配的路径值,并且世界上没有任何索引足够聪明,可以使用它。