MySQL左外部加入从加入表中计数,显示所有记录
问题描述:
我想创建一个查询,其中有一个来自另一个表的相关记录的计数。我希望“父母”记录是否有相关记录(计数)。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
我试过不同的变化这..但我不能得到父记录显示如果计数为零/没有相关记录。
感谢您的任何帮助!
答
您需要将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
答
你问的优化,希望在“路径”列的索引可以帮助。不幸的是,您正在寻找与LIKE CONCAT( '%/', r.region_id, '/%')
匹配的路径值,并且世界上没有任何索引足够聪明来处理这个问题。
做到了!万分感谢。 – toddm 2010-10-06 19:08:56
关于优化这个的任何想法?我是一个MySQL新手..我已经添加索引到路径列..但似乎没有太多。谢谢! – toddm 2010-10-06 19:16:55