从通过 PostgreSQL 中的第三个 table 连接的两个表中获取值

Getting values from two tabels which are connected via a third table in PostgreSQL

我的数据库中有三个 table 问题,question_video 和 question_video_progress。 question_video 和 question_video_progress 有一个外键 ques_id 是问题的主键。 我想要的是一个查询,我可以用它从 question_video table 得到 video_id 和从 question_video_table 得到 video_progress_time 对应于一些 ques_id 和电子邮件分别。 可能会出现 ques_id 对应 question_video 中没有 video_id 的情况。 以及 ques_id 不对应 video_progress_time.

的情况
SELECT 
QUESTION_VIDEO.VIDEO_ID,
QUESTION_VIDEO_PROGRESS.VIDEO_PROGRESS_TIME
FROM QUESTION_VIDEO 
RIGHT JOIN QUESTIONS ON QUESTION_VIDEO.QUES_ID = QUESTIONS.QUES_ID
LEFT JOIN QUESTION_VIDEO_PROGRESS ON QUESTION_VIDEO_PROGRESS.QUES_ID = QUESTIONS.QUES_ID
WHERE
(QUESTION_VIDEO_PROGRESS.EMAIL = 'someEmail@gmail.com' AND QUESTION_VIDEO.QUES_ID = 2)
OR
QUESTION_VIDEO.QUES_ID = 2; 

上面查询returns 两行对应ques_id。我想要的是,如果 QUESTION_VIDEO_PROGRESS table 中有对应于 ques_id 的电子邮件,那么 return 该电子邮件特定值,否则只是 return video_id 对应于 ques_id 如果该电子邮件不存在。

我想你只是想要:

select qv.video_id, qvp.video_progress_time
from question_video qv
left join question_video_progress qvp 
    on  qvp.ques_id = q.ques_id 
    and qvp.email = 'someEmail@gmail.com'
where qv.ques_id = 2

重要的一点是把条件放在joinon子句中的left joined table上,这样没有匹配的行就不会被过滤掉出。

另外,请注意,您不需要带 table questions 来产生您想要的结果。