我有一张PROJECT
table。用户被分配到不同的项目。用户还可以具有STAFF
或ADMINISTRATOR
角色。如果他们是STAFF
,他们应该只看到分配给他们的项目。如果他们是ADMINISTRATOR
,他们应该能够看到所有项目。
Project Table
-project_id (pk)
User Table
-user_id (pk)
Project User Table
-project_user_id (pk)
-project_id (fk)
-user_id (fk)
Role Table
-role_id (pk)
-rolename (STAFF or ADMINISTRATOR)
User Role Table
-user_role_id (pk)
-user_id (fk)
-role_id (fk)
现在,根据用户的角色(他们可以是工作人员或管理员),我想向他们展示适当的项目。这就是我试图构建查询的方式,但在如何应用条件方面遇到了困难。
第1步)
--select all projects
select
pu.project_id
from
project p
步骤2)
--select all projects and the users assigned to them
select
pu.project_id
from
project p
left join
project_user pu
on
p.project_id = pu.project_id
第3步)
--select all projects and the users assigned to them and the users role
select
pu.project_id,
pu.user_id,
r.rolename
from
project p
left join
project_user pu
on
p.project_id = pu.project_id
left join
user_role ur
on
ur.user_id = pu.user_id
inner join
role r
r.role_id = ur.role_id
这就是我现在被困的地方。如何应用条件来检查该用户是STAFF
还是ADMINISTRATOR
并选择合适的项目?
1条答案
按热度按时间y53ybaqx1#
示例数据如下:
..。您可以使用所需的所有数据创建CTE...
..。以下是生成的数据集。
现在,您可以选择按活动用户过滤的数据,如下所示:
ActiveUser=1的结果为:
..。和用于:AcctiveUser=4
如果希望管理员用户看到所有数据,则只需将WHERE子句更改为:
致敬..。