我有两个表用户(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中匹配的行数。
请帮我解决这个问题。
答案 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;
答案 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;