這裏有一種方法來獲得結果:
SELECT t.teamname
, COUNT(1) AS player_count
FROM team t
LEFT
JOIN function f
ON f.id = t.id
AND f.role = 0
GROUP BY t.teamname;
- 或 -
SELECT t.teamname
, IFNULL(SUM(f.role=0),0) AS player_count
FROM team t
LEFT
JOIN function f
ON f.id = t.id
GROUP BY t.teamname;
這些查詢使用team
表作爲驅動程序,所以我們從team
得到行即使在函數中沒有匹配的行。在第一個查詢中,我們將role = 0條件包含爲連接謂詞,但它是一個外連接。在第二個查詢中,它仍然是一個外連接,但我們只對具有role = 0的行進行「計數」。
注意它看起來好像你的模型中缺少某些東西;連接謂詞id=id
看起來很奇怪;奇怪的是我們在函數表中有一個名爲id
的列,該列是一個引用team.id
的外鍵。
通常,id
是表中的替代主鍵,它在該表中是唯一的。如果它是在function
表獨特的,那麼意味着team
和function
之間一比一的關係,並且查詢永遠不會返回一個大於1
數同樣,我強烈懷疑「成員」實體在模型中缺失。
我們期望是什麼東西這樣的:
team
id PK
teamname
member
id PK
team_id FK references team.id
role 0=player, 1=coach
使得查詢會是這個樣子:
SELECT t.teamname
, IFNULL(SUM(m.role=0),0) AS player_count
, IFNULL(SUM(m.role=1),0) AS coach_count
FROM team t
LEFT
JOIN member m
ON m.team_id = t.id
@OP,在我的回答如下查詢是相同的你的,它似乎工作正常。你是否想要得到類似於|的結果? TEAMNAME |玩家數量|或不同的東西? –
是的,我應該得到這樣的輸出。或 |#的球員|隊伍名稱| – user3482887
運行查詢時返回什麼? –