从通过 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
重要的一点是把条件放在join
的on
子句中的left join
ed table上,这样没有匹配的行就不会被过滤掉出。
另外,请注意,您不需要带 table questions
来产生您想要的结果。
我的数据库中有三个 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
重要的一点是把条件放在join
的on
子句中的left join
ed table上,这样没有匹配的行就不会被过滤掉出。
另外,请注意,您不需要带 table questions
来产生您想要的结果。