2012-04-17 30 views
1

我需要幫助爲我的數據庫創建查詢。在MySQL查詢中需要幫助 - GROUP BY

我有2個表,

資產它由(主機名,老闆,工程師,日期,分支)

分支它由(ID,姓名,地址,區)的

branch.id是一個連接到asset.branch的主鍵,它顯然是一個外鍵。

我想創建一個顯示分支信息(id,名稱,地址,區域)和該分支中資產數量的查詢。

我嘗試此查詢:

SELECT b.id, b.name, b.address, b.xcor, b.ycor, b.status, 
    COUNT(a.hostname) AS noofasset 
FROM branch b, asset a 
WHERE a.branch = b.id 
GROUP BY b.id; 

它的工作一目瞭然,但未能顯示沒有資產,它的分支信息。 我需要一個查詢,該查詢還顯示具有0資產的分支。

回答

3
SELECT b.id, b.name, b.address, b.xcor, b.ycor, b.status, 
    COUNT(a.hostname) AS noofasset 
FROM branch b 
LEFT JOIN asset a 
    on a.branch = b.id 
GROUP BY b.id, b.name, b.address, b.xcor, b.ycor, b.status 

左加入表示包括所有分支,無論資產是否存在。

site解釋了左,右外全面和類型的連接視覺..我喜歡它:d

使用你更熟悉的語法(我認爲)

SELECT b.id, b.name, b.address, b.xcor, b.ycor, b.status, 
    COUNT(a.hostname) AS noofasset 
FROM branch b, asset a 
WHERE a.branch(+) = b.id 
GROUP BY b.id; 
+0

哇,工程真的很好!我不熟悉JOIN,所以我肯定會檢查一下網站:D – user1055010 2012-04-17 02:12:39

+0

感謝給我另一個解決方案。 (+)是什麼意思? – user1055010 2012-04-17 02:19:44

+0

(+)是不符合ansi標準的方式。在1987年之前,在大多數數據庫中進行連接的唯一方法是使用第二種方法。 87年後,內納,離開,完全外部和交叉連接成爲一個標準。這兩個應該給你等效的結果。想想(+)的含義...(哎呀,我有他們倒退(並將更正))如果相應的記錄不存在於我的資產表中,無論如何返回分支。 – xQbert 2012-04-17 02:22:29