Return 主行 table 如果在加入的 table 中没有找到结果
Return row from main table if no results are found in joined tables
我想编写一个查询,在对其他 2 个 table 进行左连接后,return 主 table 的所有行。在这种情况下,我想 return 所有工作类别并计算该工作类别的重复工作数。如果没有重复出现的作业,则对该列使用 0。
循环作业 table 有一个链接到 job
table.
的外键 job_id
目前有 3 个职位类别,例如,如果只有 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;
有人能指出我正确的方向吗?谢谢。
您应该计算 table 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
这会输出所有列及其对应的重复作业计数。
希望有用。
我想编写一个查询,在对其他 2 个 table 进行左连接后,return 主 table 的所有行。在这种情况下,我想 return 所有工作类别并计算该工作类别的重复工作数。如果没有重复出现的作业,则对该列使用 0。
循环作业 table 有一个链接到 job
table.
job_id
目前有 3 个职位类别,例如,如果只有 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;
有人能指出我正确的方向吗?谢谢。
您应该计算 table 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
这会输出所有列及其对应的重复作业计数。
希望有用。