【发布时间】:2012-09-10 08:23:06
【问题描述】:
我有 3 个表:users、roles 和 roles_users(roles_users 是一个有 2 列的关系表,user_id 和 role_id)
通过roles_users 表,一个用户可以拥有多个角色。
如果用户具有特定角色,我如何构建不会选择用户的选择查询。
为了说明:
超级管理员用户具有超级管理员、管理员、登录和发布者角色。
管理员用户具有管理员、登录和发布者角色。
发布者用户具有登录和发布者角色。
我想选择所有没有超级管理员角色的用户。 换句话说,如果用户具有超级管理员角色,则不要选择它。
如何在 SQL 中实现这一点?
编辑:这是最后对我有用的查询:(感谢András Ottó's 回答)
SELECT DISTINCT(users.id), users.*
FROM users
INNER JOIN roles_users on users.id = roles_users.user_id
INNER JOIN roles ON roles_users.role_id = roles.id
WHERE NOT EXISTS(SELECT roles_users.user_id FROM roles_users
WHERE roles_users.user_id = users.id AND roles_users.role_id = 2)
【问题讨论】: