[英]Left join two tables and get the count of records in the second table
我有兩個表,第一個表帶有模塊列表,第二個模塊映射表。
我需要從第一個“模塊”表中獲取所有記錄以及第二個映射表中模塊映射 id 的相應出現次數,其中 role_id=25
我使用了下面的代碼
SELECT
`m`.`title`,
`m`.`id`,
CASE WHEN map.role_id =25 THEN 1 ELSE 0 END as counter
FROM `z6wpx_modules` as `m`
LEFT JOIN `z6wpx_users_module_map` as `map` ON `map`.`module_id` = `m`.`id`
GROUP by m.id
您可以使用COUNT()
。 例如:
SELECT
`m`.`title`,
`m`.`id`,
COUNT(*) as counter
FROM `z6wpx_modules` as `m`
LEFT JOIN `z6wpx_users_module_map` as `map` ON `map`.`module_id` = `m`.`id`
WHERE map.role_id = 25
GROUP BY m.id, m.title
或者您可以使用SUM()
函數來計算所有角色的計數
SELECT
`m`.`title`,
`m`.`id`,
SUM(CASE WHEN map.role_id = 25 THEN 1 ELSE 0 END) as counter
FROM `z6wpx_modules` as `m`
LEFT JOIN `z6wpx_users_module_map` as `map` ON `map`.`module_id` = `m`.`id`
GROUP BY m.id, m.title
子查詢會有所幫助
SELECT
`m`.`title`,
`m`.`id`,
(select COUNT(*) from `z6wpx_users_module_map` as `subMap` where
`subMap`.`module_id`=`m`.`id` ) as counter
FROM `z6wpx_modules` as `m`
LEFT JOIN `z6wpx_users_module_map` as `map` ON `map`.`module_id` = `m`.`id`
WHERE map.role_id = 25
GROUP BY m.id, m.title
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.