MySQL JOIN需要附加条件

时间:2015-01-02 14:41:19

标签: mysql sql join

我有两个表,一个作业表和一个申请人表。申请人表格中有一个包含申请职位的字段。我的查询似乎很接近,除了它只返回已应用的作业。我想要的是显示所有活动作业,这些作业还有一列显示申请人数。有些工作没有申请人,我的查询也没有抓住这些工作。

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

2 个答案:

答案 0 :(得分:1)

您需要查询的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更改为j.id,因此永远不会按NULL汇总。
  • count()更改为计数匹配。

答案 1 :(得分:0)

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

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

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