我正在尝试创建一个查询,其中有来自另一个表的相关记录的计数。我希望“父”记录是否有相关记录(计数)。
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
我尝试了不同的变体..但如果计数为零/没有相关记录,我无法显示父记录。
感谢您的帮助!
答案 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, '/%' )
匹配的路径值,并且世界上没有任何索引足够聪明,可以使用它。