2010-05-15 101 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 
相关问题