簡體   English   中英

左連接兩個表並獲取第二個表中的記錄數

[英]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.

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