[英]Return row from main table if no results are found in joined tables
我想編寫一個查詢,在對其他 2 個表進行左連接后返回主表的所有行。 在這種情況下,我想返回所有工作類別並計算該工作類別的重復工作數量。 如果沒有重復的作業,則為該列使用 0。
重復作業表具有鏈接到job
表的外鍵job_id
。
當前有三個工作類別,例如,如果只有 2 個工作重復出現,那么結果中不會顯示所有工作類別。
這是我的查詢:
SELECT
jc.category_name, COUNT( NULLIF(jc.id, 0) ) job_category
FROM `job_category` jc
LEFT OUTER JOIN `job` ON `job`.`job_category_id` = jc.id
LEFT OUTER JOIN `recurring_job` rj ON rj.job_id = `job`.`id` AND rj.id IS NOT NULL
WHERE rj.id IS NOT NULL
GROUP BY jc.id;
有人可以指出我正確的方向嗎? 謝謝。
您應該計算表recurring_job
的列job_id
並刪除所有條件rj.id IS NOT NULL
:
SELECT jc.id, jc.category_name,
COUNT(rj.job_id) counter
FROM job_category jc
LEFT OUTER JOIN job ON job.job_category_id = jc.id
LEFT OUTER JOIN recurring_job rj ON rj.job_id = job.id
GROUP BY jc.id, jc.category_name;
如果id
是job_category
的 PRIMARY KEY(看起來確實如此),則可以從GROUP BY
子句中省略category_name
。
根據您的要求,如果要計算應使用的不同重復作業的數量:
COUNT(DISTINCT rj.job_id)
感謝@forpas
在我的情況下,不需要WHERE
子句。
SELECT jc.category_name,
COUNT(rj.job_id) count
FROM `job_category` jc
LEFT OUTER JOIN `job` ON `job`.job_category_id = jc.id AND `job`.`date_added` BETWEEN '2021-01-01' AND '2021-01-25'
LEFT OUTER JOIN `recurring_job` rj ON rj.job_id = `job`.id
GROUP BY jc.id, jc.category_name
這將輸出所有列及其相應的重復作業計數。
我希望這很有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.