【问题标题】:Select only if one user role in SQL仅当 SQL 中只有一个用户角色时才选择
【发布时间】:2011-12-17 23:00:55
【问题描述】:
SELECT user_id FROM user_accounts 
INNER JOIN roles_users
ON (user_accounts.user_id = roles_users.user_id)
WHERE roles_users.role_id IN (1)

我试过了。

我希望选择所有用户 user_id,这只是一个用户(role_id 1)。在我的应用程序中,每个人都有 role_id 1,然后他们得到一个新行,其中包含他们的 user_id 和 role_id,如果他们是合作伙伴、管理员等,则为 2、3、4。

那么我如何选择所有用户user_id 在roles_users 中只有1 行,role_id 为1?

MySQL

【问题讨论】:

标签: php sql


【解决方案1】:
SELECT user_accounts.user_id, COUNT(roles_users.user_id) AS cnt
FROM user_accounts
INNER JOIN roles_users ON (user_accounts.user_id = roles_uers.user_id)
GROUP BY user_id
HAVING (cnt = 1)

【讨论】:

    【解决方案2】:

    您可以将GROUP BYHAVING 子句一起使用,以限制只有一行的结果:

    SELECT user_accounts.user_id FROM user_accounts 
    INNER JOIN roles_users
    ON (user_accounts.user_id = roles_users.user_id)
    WHERE roles_users.role_id = 1
    GROUP BY user_accounts.user_id
    HAVING COUNT(user_accounts.user_id) = 1
    

    【讨论】:

      【解决方案3】:

      这样的事情怎么样

      SELECT user_id 
      FROM roles_users
      GROUP BY user_id 
      HAVING COUNT(*) = 1 and MIN(role_id) = 1
      

      你也可以这样写:

      SELECT user_id 
      FROM roles_users RU
      WHERE role_id = 1 
      AND NOT EXISTS(SELECT * FROM roles_users WHERE role_id <> 1 and user_id = RU.user_id)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-22
        • 2014-11-12
        • 2014-02-16
        • 1970-01-01
        • 1970-01-01
        • 2019-08-12
        相关资源
        最近更新 更多