【问题标题】:Getting values from two tabels which are connected via a third table in PostgreSQL从通过 PostgreSQL 中的第三个表连接的两个表中获取值
【发布时间】:2020-11-23 09:23:31
【问题描述】:

我的数据库中有三个名为 questions、question_video 和 question_video_progress 的表。 question_video 和 question_video_progress 有一个外键 ques_id,它是问题的主键。 我想要的是一个查询,我可以从 question_video 表中获取 video_id,从 question_video_table 中获取 video_progress_time,分别对应于一些 ques_id 和 email。 可能存在 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; 

上面的查询返回两行对应ques_id。我想要的是,如果 QUESTION_VIDEO_PROGRESS 表中存在与 ques_id 对应的电子邮件,则返回该电子邮件特定的值,否则如果该电子邮件不存在,则返回与 ques_id 对应的 video_id。

【问题讨论】:

    标签: sql postgresql left-join where-clause


    【解决方案1】:

    我想你只是想要:

    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
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-09
      • 2018-08-17
      • 2022-01-15
      • 1970-01-01
      • 2011-08-27
      • 2019-05-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多