2012-08-13 82 views
2

我想返回表A(組)中的所有項目的簡單列表與列B(users_groups)中的相應用戶數的計數,我可以弄清楚我要去哪裏錯了。左外連接計數不返回0計數行

SELECT groups.gid, name, COUNT(uid) AS groupcount 
FROM groups 
LEFT OUTER JOIN users_groups ON groups.gid = users_groups.gid 
WHERE aid = ? 

我目前有兩個組,其中一個有三個用戶。該行在groupcount中返回適當的值,但我錯過了第0行顯示的第0行。任何人都可以將我指向正確的方向嗎?謝謝!

回答

2

想必這是因爲援助在users_groups中,而不是在組中。

左外連接將創建一個行,其中這是NULL。除「爲空」以外的任何比較都不會導致匹配。

你可以做這樣的事情解決這個問題:

where coalesce(aid, ??) = ?? 

如果這是你查詢的意圖。

或者,另一種選擇是,您沒有在您的查詢中找到一個組。試試這個:

SELECT groups.gid, name, COUNT(uid) AS groupcount 
FROM groups LEFT OUTER JOIN 
    users_groups 
    ON groups.gid = users_groups.gid 
WHERE aid = ? 
group by groups.gid, name 

Mysql具有可以在SELECT子句中包含未聚合列的特徵。但是,它只會根據組中的內容進行分組。由於您沒有爲分組指定任何內容,因此它將在所有數據上生成一行。 gid和name的值是從輸入中任意選擇的。

+0

不,我應該在我的查詢中更詳細 - 援助是在組表中,並指定WHERE groups.aid =?沒有幫助。 – 2012-08-13 21:18:58

+0

啊,這是一羣人,應該猜到了!謝謝一堆! – 2012-08-13 21:26:54

+0

我有一個類似的問題。重要的一點是內部數據(.....) - 在我的情況下從第二張表格。 – Yar 2016-04-11 19:00:03