这个mysql查询有什么问题

时间:2011-02-02 11:37:18

标签: mysql

SELECT v.*, COUNT(a.*) 
FROM vacancies AS v, applications AS a 
WHERE a.vacancy_id = v.id

基本上我需要一种计算与每个空缺相对应的应用程序数量的方法。

申请有空缺ID。所以我想从vacancies表中获取空缺并迭代它们输出具有相同vacancy_id的应用程序数量。

这是正确的方法吗?它说我COUNT(a.*)位有问题。

有什么想法吗?

谢谢。

修改

好的,所以我逐个尝试了这个小组,现在有了这个:

SELECT v.*, COUNT(a.candidate_id)
FROM vacancies AS v, applications AS a 
WHERE a.vacancy_id=v.id 
GROUP BY v.title

但它只返回一个结果,因为只有一个应用程序。即使没有与空缺相关的申请,有没有办法从空缺表中归还一切?

4 个答案:

答案 0 :(得分:1)

您需要GROUP BY条款。添加类似

的内容
   GROUP BY vacancy.somefield

查询。见COUNT function reference in MySQL

选择职位空缺表的所有成员,而不是写

   WHERE a.vacancy_id = v.id

你应该使用LEFT JOIN条款:

   LEFT JOIN applications ON a.vacancy_id = v.id

请参阅MySQL JOIN documentation

答案 1 :(得分:1)

COUNT是一个群组操作。你需要在最后使用GROUP BY。

修改 使用左连接

SELECT v。*,COUNT(a.candidate_id) 来自职位空缺AS v LEFT JOIN应用程序AS a avacancy_id = v.id. GROUP BY v.title

答案 2 :(得分:0)

如果要混合聚合和名称

,则需要GROUP BY

答案 3 :(得分:0)

SELECT 
    v.id, COUNT(*)
FROM 
    vacancies AS v, 
    applications AS a 
WHERE 
    a.vacancy_id=v.id
GROUP BY 
    v.id