获取所有用户及其在另一个表中的记录数

时间:2016-06-13 06:17:08

标签: mysql left-join

我有两个表用户(user_id,名称)和许可证(license_id,user_id)

我想让所有用户获得许可证表中的记录数量。 问题似乎很简单,但我无法弄清楚它的问题。

我试过

SELECT * FROM `users` a left join license b on a.user_id=b.user_id

但是这给了我一行a和匹配的b表行,而我想要a和a的所有行以及b中匹配的行数。

请帮我解决这个问题。

3 个答案:

答案 0 :(得分:2)

如果您想要匹配用户的数量,您应该使用count和group by

SELECT user_id, name, count(*)
FROM `users` a 
INNER join license b on a.user_id=b.user_id
Group by user_id, name

你只需要匹配的数量

select count(*) 
FROM `users` a 
INNER join license b on a.user_id=b.user_id

而是返回许可证中的号码数

  select count(*) 
  FROM `users` a 
  LEFT join license b on a.user_id=b.user_id 

然后您只需使用

即可获得相同的数字
  select count(*) 
  from  license 

否则,如果您想要使用alto编号,则用户不要使用matc然后尝试

SELECT user_id, name, ifnull(count(*), 0)
FROM `users` a 
LEFT join license b on a.user_id=b.user_id
Group by user_id, name

答案 1 :(得分:0)

尝试此查询:

SELECT a.user_id, a.name, COUNT(b.user_id)
  FROM `users` a 
  LEFT JOIN license b ON a.user_id=b.user_id
  GROUP BY user_id, NAME;

输出:SEE DEMO HERE

答案 2 :(得分:0)

SELECT 
  U.user_id, U.name, COUNT(L.license_id) as licenseCount
FROM `users` U
LEFT JOIN license L ON U.user_id=L.user_id
GROUP BY U.user_id;
  

参考Sql Fiddle