2010-05-15 106 views
3

我有2個表:用戶和圖片。圖片表具有用戶的鍵。所以基本上每個用戶可以有多個圖片,每張圖片屬於一個用戶。 現在,我試圖做出以下查詢:我想選擇所有的用戶信息加上他擁有的圖片總數(即使它是0)。我怎樣才能做到這一點?可能它聽起來很簡單,但我試圖嘗試,似乎無法找到正確的查詢。我唯一可以選擇的就是這個信息,但只適用於至少有1張圖片的用戶,這意味着Pictures表格至少有一個記錄用於該關鍵字......但我也想考慮沒有任何用戶的用戶。任何想法? 謝謝!MySQL查詢:一個表的所有記錄加上另一個表的計數

+0

請後,你有這麼遠的查詢。 – 2010-05-15 10:29:33

回答

7

你可能想嘗試以下操作:

SELECT u.name, 
      IFNULL(sub_p.total, 0) num 
FROM  users u 
LEFT JOIN (SELECT COUNT(*) total, user_id 
      FROM  pictures 
      GROUP BY user_id 
     ) sub_p ON (sub_p.user_id = u.user_id); 

測試用例:

CREATE TABLE users (user_id int, name varchar(10)); 
CREATE TABLE pictures (user_id int); 

INSERT INTO users VALUES (1, 'Joe'); 
INSERT INTO users VALUES (2, 'Peter'); 
INSERT INTO users VALUES (3, 'Bill'); 

INSERT INTO pictures VALUES (1); 
INSERT INTO pictures VALUES (1); 
INSERT INTO pictures VALUES (2); 
INSERT INTO pictures VALUES (2); 
INSERT INTO pictures VALUES (2); 

結果:

+-------+-----+ 
| name | num | 
+-------+-----+ 
| Joe | 2 | 
| Peter | 3 | 
| Bill | 0 | 
+-------+-----+ 
3 rows in set (0.00 sec) 
+0

完美!謝謝! – Ricardo 2010-05-15 10:45:33

+0

是否需要GROUP BY? – vulkanino 2010-08-31 10:16:50

+0

@vulkanino:不,你說得對。這不是必需的。不過,每當我有一個聚合函數時,我都希望有一個明確的「GROUP BY」。我發現理解查詢更容易。 – 2010-08-31 12:05:46

2
SELECT u.name, COUNT(p.picture) AS number 
FROM User u 
LEFT JOIN Picture p 
    ON u.id = p.userid 
GROUP BY p.userid 
相關問題