我有一个包含三个表的 PostgreSQL 数据库:
user
:应用程序的用户列表。主键是user_id
.course
:用户可以注册的课程目录。主键是course_id
.enrollment
:用户注册课程的记录。主键是enrollment_id
.
表之间的关系:
该
enrollment
表有两个不能为空的外键:enrollment.user_id
参考资料user.user_id
。enrollment.course_id
参考资料course.course_id
。
如果
user1
被注册course1
,表中应该只有一条记录enrollment
可以用来user1
连接course1
。如果
user1
未注册,则表中不存在要加入的记录。course1
enrollment
user1
course1
问题:
- 我不知道如何编写一个数据库视图,如果我有 2 个用户和 3 个课程,它会返回 6 行,如下所示:
user_id | course_id | enrollment_id
-------------------------------------
user1 | course1 | enrollment id of user1 for course1 or null
user1 | course2 | enrollment id of user1 for course2 or null
user1 | course3 | enrollment id of user1 for course3 or null
user2 | course1 | enrollment id of user2 for course1 or null
user2 | course2 | enrollment id of user2 for course2 or null
user2 | course3 | enrollment id of user2 for course3 or null
一些上下文:
- 我无法更改有关数据库的任何内容。
- 我不关心性能。
我正在进行的工作:
我坦率地希望这会奏效:
select user.user_id, course.course_id, enrollment.enrollment_id
from user
full outer join enrollment on enrollment.user_id = user.user_id
full outer join course on course.course_id = enrollment.course_id
由于没有enrollment
用户未注册的课程的记录,因此此查询不会返回我期望的结果。例如,结果看起来更像这样:
user_id | course_id | enrollment_id
-------------------------------------
user1 | null | null
user2 | course1 | enrollment id of user2 for course1
user2 | course2 | enrollment id of user2 for course2
这不是我所期望的,因为我希望表返回 3 条记录user1
,他们没有参加任何课程,而不是只有一行 wherecourse_id
和enrollment_id
are null
。user2
同样,由于他们没有注册,所以缺少第三条记录course3
,这不是我所希望的。
我怎么解决这个问题?