簡體   English   中英

如果在連接表中沒有找到結果,則從主表返回行

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

如果idjob_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.

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