我有 3 个表:用户、角色和角色用户(角色用户是一个有 2 列的关系表,用户 ID 和角色 ID)
通过roles_users 表,一个用户可以拥有多个角色。
如果他具有特定角色,我如何构建不会选择用户的选择查询。
为了显示 :
超级管理员用户具有超级管理员、管理员、登录和发布者角色。
管理员用户具有管理员、登录和发布者角色。
发布者用户具有登录和发布者角色。
我想选择所有没有超级管理员角色的用户。换句话说,如果用户具有超级管理员角色,则不要选择它。
我怎样才能在 SQL 中实现这一点?
编辑:这是最后对我有用的查询:(感谢András Ottó 的回答)
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)