2010-10-06 88 views
0

我想创建一个查询,其中有一个来自另一个表的相关记录的计数。我希望“父母”记录是否有相关记录(计数)。MySQL左外部加入从加入表中计数,显示所有记录

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

您需要将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 
+0

做到了!万分感谢。 – toddm 2010-10-06 19:08:56

+0

关于优化这个的任何想法?我是一个MySQL新手..我已经添加索引到路径列..但似乎没有太多。谢谢! – toddm 2010-10-06 19:16:55

1

你问的优化,希望在“路径”列的索引可以帮助。不幸的是,您正在寻找与LIKE CONCAT( '%/', r.region_id, '/%')匹配的路径值,并且世界上没有任何索引足够聪明来处理这个问题。