簡體   English   中英

MySQL左外連接,帶有連接表中的Count,顯示所有記錄

[英]MySQL Left Outer Join with Count from joined table, Show all records

我試圖創建一個查詢,其中有來自另一個表的相關記錄的數量。 我想要“父”記錄是否有相關記錄(計數)。

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 

我已經嘗試過這種方法的其他變體..但是如果計數為零/沒有相關記錄,我將無法顯示父記錄。

謝謝你的幫助!

您需要將“ p.active = 1”從WHERE子句移到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, '/%' )匹配的path的值,並且世界上沒有任何索引足以與之配合使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM