2014-10-05 97 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