2014-05-12 20 views
0

如果我有两个表job,employee。 我需要从作业中选择所有,并为每项作业添加员工数量。从多个表中选择mysql的次数

认为结果

job table 
+-------------+-------------+ 
| id   | name  | 
+-------------+-------------+ 
| 1   | Teacher  | 
+-------------+-------------+ 
| 2   | Engineer | 
+-------------+-------------+ 
| 3   | Programmer | 
+-------------+-------------+ 

employee table 
+-------------+-------------+-------------+ 
| id   | name  | job_id | 
+-------------+-------------+-------------+ 
| 1   | employee N |  1  | 
+-------------+-------------+-------------+ 
| 2   | employee N |  2  | 
+-------------+-------------+-------------+ 
| 3   | employee N |  3  | 
+-------------+-------------+-------------+ 
| 4   | employee N |  1  | 
+-------------+-------------+-------------+ 
| 5   | employee N |  3  | 
+-------------+-------------+-------------+ 
| 6   | employee N |  1  | 
+-------------+-------------+-------------+ 

我需要从作业的所有选择和追加的员工数为每个作业。

认为结果

Result table 
+-------------+-------------+--------------+ 
| id   | name  |employee count| 
+-------------+-------------+--------------+ 
| 1   | Teacher  |  3  | 
+-------------+-------------+--------------+ 
| 2   | Engineer |  1  | 
+-------------+-------------+--------------+ 
| 3   | Programmer |  2  | 
+-------------+-------------+--------------+ 

回答

2

我喜欢使用左侧加入:)

SELECT job.id, job.name, count(*) AS 'employee count' 
FROM job 
LEFT JOIN employee 
ON job.id = employee.job_id 
GROUP BY job.id 
1

你想用INNER JOIN联接表,然后GROUP BY到组的作业ID。最后用COUNT()获得各组的计数

SELECT job.id, job.name, count(*) AS employee_count 
FROM job 
INNER JOIN employee 
    ON job.id = employee.job_id 
GROUP BY job.id 

你可以看到它住在这里http://sqlfiddle.com/#!2/9d59c1/1