Mysql 使用join从一个表中获取记录数

Mysql 使用join从一个表中获取记录数,mysql,Mysql,情况就是这样: 我有3个表,用户,组,用户组(关系表) 在用户中,我们有:id 在组中,我们有:id,people(可以在组中的最大人数) 在用户组中:组id,用户id 我想在同一个查询中完成的是获取所有尚未满的组。这意味着与组关联的用户组(总数)少于组中的人员(group.people) 例如:id为5、人员为6的组,以及组id为5的6个用户组。因此,我想要访问的查询不会得到group.id=5 到目前为止,我得到的是: SELECT `group`.* FROM `group` JOIN

情况就是这样:

  • 我有3个表,用户用户组(关系表)
  • 在用户中,我们有:id
  • 在组中,我们有:id,people(可以在组中的最大人数)
  • 在用户组中:组id,用户id
我想在同一个查询中完成的是获取所有尚未满的组。这意味着与组关联的用户组(总数)少于组中的人员(group.people)

例如:id为5、人员为6的组,以及组id为5的6个用户组。因此,我想要访问的查询不会得到group.id=5

到目前为止,我得到的是:

SELECT `group`.*
FROM `group`
JOIN `user_group` ON `user_group`.`group_id` = `group`.`id`
WHERE `group`.`people` > ¿COUNT(total_user_gruop)?
我想做一个子查询来获得每个组的用户组总数,但我不知道如何实现,或者这是否可能


谢谢大家

您需要一个
分组依据
拥有
子句

HAVING
在GROUP BY和counts之后执行,因此您拥有需要与GROUP people进行比较的计数

我在这里使用distinct只是因为我不知道用户组表中是否允许重复;我假设这样一个复制品,如果存在的话,在总数中不会超过一次

SELECT G.Group_ID, count(Distinct UG.User_ID)
FROM user_group UG
INNER JOIN `group` G
 on UG.Group_ID = G.ID
GROUP BY G.Group_ID
HAVING count(Distinct UG.User_ID) < G.People
选择G.Group\u ID、count(不同的UG.User\u ID)
来自用户组UG
内联接`group`G
关于UG.Group_ID=G.ID
按G.GROUP\U ID分组
有计数(不同的用户ID)
您需要一个
分组依据
具有
子句

HAVING
在GROUP BY和counts之后执行,因此您拥有需要与GROUP people进行比较的计数

我在这里使用distinct只是因为我不知道用户组表中是否允许重复;我假设这样一个复制品,如果存在的话,在总数中不会超过一次

SELECT G.Group_ID, count(Distinct UG.User_ID)
FROM user_group UG
INNER JOIN `group` G
 on UG.Group_ID = G.ID
GROUP BY G.Group_ID
HAVING count(Distinct UG.User_ID) < G.People
选择G.Group\u ID、count(不同的UG.User\u ID)
来自用户组UG
内联接`group`G
关于UG.Group_ID=G.ID
按G.GROUP\U ID分组
有计数(不同的用户ID)
检查此查询

Select `group`.*, count(`user_group`.user_id) as current_users from `user_group` 
inner join `group` on `group`.id = `user_group`.group_id
group by `user_group`.group_id
having count(`user_group`.user_id) < `group`.people
选择'group`.*,将('user\u group`.user\u id)计数为'user\u group'中的当前用户
在'group'上的内部联接'group'。id='user\u group'。group\u id
按“用户组”分组。组id
拥有计数(`user\u group`.user\u id)<`group`.people
检查此查询

Select `group`.*, count(`user_group`.user_id) as current_users from `user_group` 
inner join `group` on `group`.id = `user_group`.group_id
group by `user_group`.group_id
having count(`user_group`.user_id) < `group`.people
选择'group`.*,将('user\u group`.user\u id)计数为'user\u group'中的当前用户
在'group'上的内部联接'group'。id='user\u group'。group\u id
按“用户组”分组。组id
拥有计数(`user\u group`.user\u id)<`group`.people

希望这能解决您的问题

SELECT *
FROM `group`
INNER JOIN `user_group` ON `group`.`id` = `user_group`.`group_id`
GROUP BY `user_group`.`group_id`
HAVING COUNT(`user_group`.`user_id`) < `group`.`people`
选择*
来自`集团`
“组”上的内部联接“用户组”。“id”=“用户组”。“组id”`
按“用户组”分组。“组id”`
拥有计数(`user\u group`.`user\u id`)<`group`.`people`

希望这能解决您的问题

SELECT *
FROM `group`
INNER JOIN `user_group` ON `group`.`id` = `user_group`.`group_id`
GROUP BY `user_group`.`group_id`
HAVING COUNT(`user_group`.`user_id`) < `group`.`people`
选择*
来自`集团`
“组”上的内部联接“用户组”。“id”=“用户组”。“组id”`
按“用户组”分组。“组id”`
拥有计数(`user\u group`.`user\u id`)<`group`.`people`

我不允许重复。但我从你的提问中学到了一些新东西。谢谢我不允许重复。但我从你的提问中学到了一些新东西。谢谢