【发布时间】:2014-07-15 20:41:47
【问题描述】:
我正在尝试创建一个包含 4 个表中所有数据组合的视图。
这是我的表格的简化布局:
users:
user_id - a unique id
name - name of the user
role - the unique role of the user, which is one of the following
project:
project_id - a unique id
project_name - name of the project
roles:
role - Unique role name. Currently: (employee, manager, admin)
project_users:
project_id - the project id from project table
user_id - the user id from user table
role - the role of the user associated with user_id
我基本上想创建一个包含project_id 和role 和user_id 的所有组合的视图,无论是否有某个角色分配给项目的用户。
例如,如果project 表中只有 2 个项目,并且只有 1 个用户分配给项目 1,并且没有用户分配给项目 2,那么视图应该显示如下:
- 查看 - project_roles:
- 第 1 行:project_id = 1,角色 = 员工,user_id = 1
- 第 2 行:project_id = 1,角色 = 经理,user_id = null
- 第 3 行:项目 id = 1,角色 = 管理员,user_id = null
- 第 4 行:project_id = 2,角色 = 员工,user_id = null
- 第 5 行:project_id = 2,角色 = 经理,user_id = null
- 第 6 行:project_id = 2,角色 = admin,user_id = null
基本上,我将使用此视图返回没有分配给它特定角色的用户的项目。
例如,如果我想获得一个没有分配经理的项目列表,我可以:
SELECT project_id FROM project_roles WHERE user_id IS NULL AND role='manager';
我似乎找不到可以执行此操作的连接查询。到目前为止,我有以下内容:
CREATE VIEW project_roles AS
SELECT
pu.project_id,
pu.user_id,
r.role
FROM
project_users pu
FULL OUTER JOIN role r ON pu.role = r.role;
但是,它并没有给我想要的视图。 :(
【问题讨论】:
标签: sql postgresql view