需要复杂postgresql选择中的帮助吗

需要复杂postgresql选择中的帮助吗,sql,postgresql,select,Sql,Postgresql,Select,我的数据库中有3个表 一个用于活动,另一个用于学生,最后一个用于学生在活动中的分数。所以一个活动可以有一个或多个学生的分数,一个学生在一个活动中有一个分数 所以我需要展示一个学生课程的活动列表,即使他还没有得分。但是,如果学生在某些活动中有分数,我必须只显示该学生的分数 我的问题是,当我选择学生的分数时,我需要添加一个“where”条件来只选择他的分数,但是如果他还没有得分,我的成绩中就没有记录。我如何选择课程的所有活动,并且仅当学生有分数时,才选择该活动的分数 活动表: id | name

我的数据库中有3个表

一个用于活动,另一个用于学生,最后一个用于学生在活动中的分数。所以一个活动可以有一个或多个学生的分数,一个学生在一个活动中有一个分数

所以我需要展示一个学生课程的活动列表,即使他还没有得分。但是,如果学生在某些活动中有分数,我必须只显示该学生的分数

我的问题是,当我选择学生的分数时,我需要添加一个“where”条件来只选择他的分数,但是如果他还没有得分,我的成绩中就没有记录。我如何选择课程的所有活动,并且仅当学生有分数时,才选择该活动的分数

活动表:

id | name        | score
1  | first exam  | 30
2  | second exam | 30
3  | final exam  | 40
学生表:

id | name
1  | Jhon
2  | Sam
3  | Frank
学生成绩表:

id | activity | student | score
1  | 1        | 1       | 16
2  | 1        | 2       | 17
3  | 1        | 3       | 15
因此,如果Jhon进入系统并想查看活动的进程,他应该看到所有活动的列表,但只有他的分数。例如,此列表:

Activity    | Score | Your Score
First Exam  | 30    | 16
Second Exam | 30    | -
Final Exam  | 40    | -

您需要左外联接:

select a.activity_id, coalesce(acs.score, 0) as thescore
from activities a left outer join
     activityscores acs
     on a.activity_id = acs.activity_id and
        acs.student_id = THESTUDENTID;

如果一个学生在一个活动中可以有多个分数,那么您也需要一个聚合。

最好有您的表结构(可能还有一些数据)和您迄今为止尝试过的一样