繁体   English   中英

MySQL JOIN需要附加条件

[英]MySQL JOIN Needs Additional Condition

我有两个表,一个工作表和一个申请人表。 申请人表有一个包含应聘职位的字段。 我的查询似乎很接近,只是它只返回已应用的作业。 我想要的是所有活动职位的显示,并且还有一列显示申请人数量。 有些职位没有应聘者,而我的查询未涵盖这些职位。

SELECT * , COUNT(*) as total
FROM `job` 
INNER JOIN applicants 
ON applicants.position_id=job.id
WHERE active = 'yes'
GROUP BY position_id
ORDER BY title

您需要查询的left join和其他小的解决方案:

SELECT j.*, COUNT(a.position_id) as total
FROM `job` j LEFT JOIN
     applicants a
     ON a.position_id = j.id
WHERE j.active = 'yes'
GROUP BY j.id 
ORDER BY j.title;

更改为:

  • 引入了表别名(使查询更易于编写和阅读)。
  • 将表别名用于所有列引用。
  • select更改为j.*而不是* 由于group by原因,仅职位信息是合适group by
  • group by更改为j.id ,因此它永远不会通过NULL聚合。
  • 更改了count()以计算匹配项。

正如其他人提到的那样,您的联接必须是外部联接。

但是,通过简单的查询,您可以轻松地仅从作业中进行选择,并在select子句中获取应用程序计数。 这样您就可以使查询更具可读性。

select 
  job.*,
  (select count(*) from applicants where position_id = job.id) as total
from job
where active = 'yes'
order by title;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM