-3

我在 MySQL 中有 4 个表

用户

在此处输入图像描述

用户信息

在此处输入图像描述

USER_RIGHTS

在此处输入图像描述

101 = 正确读取

102 = 正确写入

103 = 删除权

在此处输入图像描述

现在,当我想使用 INNER JOIN 选择所有用户时,我会执行类似的操作

SELECT users.id, user_info.first_name, user_info.last_name, user_rights.right
    FROM `users`
INNER 
    JOIN user_info 
    ON users.id = user_info.user_id
ORDER BY user_info.first_name;

我有 2 个用户。

例如,我想创建另一个 INNER JOIN 来选择在第 1 组中具有权限的成员,但我的代码不起作用......

SELECT users.id, user_info.first_name, user_info.last_name, user_rights.right
    FROM `users`
INNER 
    JOIN user_info 
    ON users.id = user_info.user_id
INNER 
    JOIN user_rights 
    ON user_rights.rights = '101' 
ORDER BY user_info.first_name;

这个想法是选择哪些成员在某个组中具有 READ 权限。希望我说清楚。

4

3 回答 3

4
SELECT users.id, user_info.first_name, user_info.last_name, user_rights.right
    FROM `users`
INNER 
    JOIN user_info 
    ON users.id = user_info.user_id
INNER 
    JOIN user_rights 
    ON user_rights.user_id = users.id 
INNER JOIN groups 
    on groups.id = user_rights.group
where user_rights.right = '101' 
and groups.group_name = 'Human Resources'
ORDER BY user_info.first_name;
于 2012-05-22T12:38:10.430 回答
1

您必须添加与组表的联接:

SELECT users.id, user_info.first_name, user_info.last_name, user_rights.right
    FROM `users`
INNER 
    JOIN user_info 
    ON users.id = user_info.user_id
INNER 
    JOIN user_rights 
    ON user_rights.user_id = users.id
INNER 
    JOIN groups 
    ON user_rights.group = groups.id
WHERE user_rights.rights = '101' AND groups.group_name = 'Human Resources'
于 2012-05-22T12:39:55.653 回答
0

使用带有 User_Rights 的 Left Join 来获取所有用户和权限

SELECT users.id, 
       user_info.first_name, 
       user_info.last_name, 
       user_rights.right 
FROM   users 
       INNER JOIN user_info 
         ON users.id = user_info.user_id 
       LEFT JOIN user_rights 
         ON user_rights.user_id = users.id 
            AND user_rights.right = '101' 
       LEFT JOIN GROUPS 
         ON user_rights.group = GROUPS.group 
            AND groups.group_name = 'Human Resources' 
ORDER  BY user_info.first_name; 
于 2012-05-22T12:39:45.573 回答