【问题标题】:Find a user that is not a member of a specific group查找不是特定组成员的用户
【发布时间】:2013-11-14 19:05:04
【问题描述】:

我有一个用户表和一个组表以及一个将用户与组链接的表。默认组称为“所有用户”。所有新用户都被放置在这个组中。然后将它们链接到更具体的组,例如销售或采购等,但它们也保留在“所有用户”中。 我想查询“所有用户”组中的所有用户,但不是任何其他组的成员。

我希望我解释得足够好。

谢谢, 鲍勃

【问题讨论】:

  • 你真的同时使用 MySQL 和 Access 吗?

标签: mysql sql ms-access


【解决方案1】:
SELECT userid, count(*) group_count
FROM user_groups
GROUP BY userid
HAVING group_count = 1

如果一个用户只在一个组中,它必须是 All Users 组,这只会列出那些用户。

【讨论】:

  • 感谢 Barmar!最终代码:SELECT dbo_groupMembers.UserID, Count(dbo_groupMembers.GroupID) AS CountOfGroupID FROM dbo_groupMembers GROUP BY dbo_groupMembers.UserID HAVING ((((Count(dbo_groupMembers.GroupID))=1)) ;
  • 既然您已经为计数分配了别名CountOfGroupID,为什么还要在HAVING 子句中重复Count(dbo_groupMember.GroupID) 表达式?也许 DBMS 会足够聪明,不会重复计算,但为什么会这样呢?
【解决方案2】:

这是假设您的名为 AllUsers 的表对每个名为 id 的用户都有一个唯一的 ID,并且您的 Group 表有一个链接到 AllUsers.id 的外键 userId。

SELECT * FROM AllUsers WHERE AllUsers.id != userId;

如果我理解了你的问题,那就应该这样做。

【讨论】:

    【解决方案3】:

    你有三个表,比如说:

    tblUser: userid, username
    tblgroup: groupid, groupname
    tblUserGroup: fkuserid, fkgroupid
    

    创建新用户时,应自动在tblUserGroup 中创建一条记录,链接useridgroupid

    当用户添加新组时,您只需在tblUserGroup 中添加一条相同的userid 和新的groupid 记录。您不需要删除第一条记录,因为它们现在在两个组中。

    【讨论】:

    • 他什么时候说过要删除记录?这如何回答查找不属于所有用户组以外的任何组的用户的问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    相关资源
    最近更新 更多