2013-01-22 64 views
2

這可能是非常簡單的,但由於某些原因,我拉一個空白就這一個..COUNT(*)與加入

我要加入兩個表,並得到一個列的總髮生在一個表在另一個表中。 表1

id | company 
------------ 
1 | companyA 
2 | companyB 
3 | companyC 


Table2 

id | company_id 
------------ 
1 | 2 
2 | 2 
3 | 1 
4 | 2 
5 | 3 

結果應該是:

company | count(*) 
------------------ 
companyA| 1 
companyB| 3 
companyC| 1 

我似乎無法得到計數部分正確。我想,這將是這樣的:

SELECT Table1.company, count(*) 
FROM Table1 JOIN Table2 ON 
Table1.id = Table2.company_id 
GROUP BY Table1.company; 

修:這個問題實際上是公司A和companyB拿出正確的,但它沒有顯示companyC。我經歷了一番,並仔細檢查了有關companyC的字段中有匹配。

回答

4

應該Table2.company_id要與之連接和Table2.id

SELECT Table1.company, count(*) 
FROM Table1 
     INNER JOIN Table2 
      ON Table1.id = Table2.company_id -- <<== here 
GROUP BY Table1.company; 

必須因爲你與分組它定義上的tablecompany列的INDEX可能UNIQUE)獲得更快的性能company

UPDATE 1

SELECT Table1.company, count(Table2.company_id) 
FROM Table1 
     LEFT JOIN Table2 
      ON Table1.id = Table2.company_id -- <<== here 
GROUP BY Table1.company; 
+1

對不起,那是一個錯字。我在問題中增加了更多關於這個問題的更具體的內容。公司A和公司B都出現了,但公司C不是。 – SergeantHacker

+0

哦,我明白了,你應該使用'LEFT JOIN'而不是'INNER JOIN'。我會更新答案。 –