2014-10-05 57 views
1

我遇到问题。解决方案归结为我缺乏SQL知识。 我有2张桌子。MySQL加入和COUNT(*)查询

Table : Jobs 
+---+----------+ 
|ID | JobName | 
+---+----------+ 
| 1 | Tinker | 
| 2 | Tailor | 
| 3 | Soldier | 
| 4 | Sailor | 
+---+----------+ 

Table : Applied 
+---+--------------+--------+ 
|ID | JobAppliedID | Name | 
+---+--------------+--------+ 
|1 | 1   |Cliff | 
|2 | 2   |John | 
|3 | 2   |Ringo | 
|4 | 2   |Paul | 
+---+--------------+--------+ 

现在,我想要做的就是创建一个SQL,这将只是做一个简单的选择上表JOBS,...

SELECT * FROM作业;

但我想在SELECT中重新计算每个作业已经应用了多少次。例如,它会返回以下内容。

+---+----------+-------+ 
|ID | JobName | Count | 
+---+----------+-------+ 
| 1 | Tinker | 1 | 
| 2 | Tailor | 3 | 
| 3 | Soldier | 0 | 
| 4 | Sailor | 0 | 
+---+----------+-------+ 

我想我需要一个嵌入式SELECT,但我只是不知道从哪里开始。

任何人都可以帮忙吗?

谢谢。

回答

3

你需要一个左连接,像这样......使用聚结,处理空值

SELECT j.*, COUNT(a.jobappliedid) AS numApplied 
FROM jobs j 
LEFT JOIN applied a ON a.jobappliedid = j.ID 
GROUP BY j.id 

Fiddle Demo

+0

'COUNT(a.jobappliedid)'会做的伎俩没有'COALESCE'。甚至更多 - 你的COUNT(*)将总是返回至少1行,从不返回0或NULL。甚至更远 - “COUNT(expr)'永远不会返回NULL。 – zerkms 2014-10-05 23:07:38

+0

@zerkms你是对的我在我的手机,所以我甚至没有机会测试要么大声笑 – 2014-10-05 23:14:47

+0

谢谢你们。我几乎是正确的,但没有到位的GROUP BY。 – Cliff 2014-10-06 10:22:33