Return 结果来自 3 tables,其中结果数应等于 table 1 中的行数乘以 table 3 中的行数

Return results from 3 tables where the number of results should be equal to the number of rows in table 1 multiplied by the number of rows in table 3

我有一个包含三个 table 的 PostgreSQL 数据库:

table之间的关系:

问题:

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
 

此查询没有 return 我期望的结果,因为没有 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

这不是我所期望的,因为我希望 user1 的 table 到 return 3 条记录,谁没有参加任何课程,而不是只有一行course_idenrollment_idnull。同样,user2 的第三条记录丢失了,因为他们没有在 course3 中注册,这不是我所希望的。

我该如何解决这个问题?

交叉加入用户和课程,左加入注册:

select u.user_id, c.course_id, e.enrollment_id
from users u
cross join courses c
left join enrollment e
    on e.user_id = u.user_id
    and e.course_id = c.course_id

dbfiddle here(Postgres 14)