【发布时间】:2019-11-06 19:07:08
【问题描述】:
我正在尝试编写通过包含至少一个display = 1 权限来过滤用户的选择。我的表格如下所示:
User:
-id
-user_email_id
UserGroupRelation:
-id
-user_id
-user_email_id
-user_group_id
UserGroupPermission
-id
-permission_id
-display(bool)
-user_group_id
一个用户,可以有多个组和分配给组的权限。我想选择组中的所有用户,这些用户至少具有一项权限且显示设置为 1。我该怎么做?
这是我尝试过的,但没有成功。
SELECT *
FROM User as u
LEFT OUTER JOIN
UserGroupRelation as ugr on ugr.user_id = u.id and ugr.user_email_id = u.user_email_id
LEFT OUTER JOIN
UserGroupPermission as ugp on ugp.user_group_id = ugr.user_group_id
WHERE
ugp.display = 1
我认为问题在于用户有多个组关系并且组有多个权限。也许我应该在 FROM 子句中使用另一个选择?
样本数据:
User:
{id=1, user_email_id=1},
{id=2, user_email_id=2}
UserGroupRelation:
{id-1, user_group_id=1, user_id=1, user_email_id=1},
{id=2, usergroup_id=2, user_id=2, user_email_id=2}
UsergroupPermission:
{id=1, permission_id=1, display=1, user_group_id=1},
{id=2, permission_id=1, display=0, user_group_id=2}
结果应该只返回 id=1 的用户,因为他连接到 group_id = 1,该用户具有 display=1 的权限,id 为 2 的用户不在结果中,因为他具有 display=0 的权限。这很简单例如,因为用户可以有多个组,组可以有多个权限,但结果中只需要一个 h as display = 1 的权限
【问题讨论】:
-
我一直在尝试在 UserGroupRelation 和 UserGroupPermission 上使用左外连接,然后在哪里 display = 1 但我得到了意想不到的结果
-
您是否偶然错过了 UserGroupRelation 之前的 join 语句?
-
我认为表连接正确,但可能我需要使用一些子查询,对具有 display=1 或类似内容的 Permission 行进行计数,然后 WHERE count > 0
-
您在问题中发布的 SQL 在
users as u和UserGroupRelation之间缺少单词left outer join- 我想。您尝试连接 2 个表,但只使用了一次连接语法。我假设它是一种类型? -
哦,是的,这是一个错字,我重写了它而不是粘贴
标签: sql sql-server