我正在尝试从问题表中获取所有记录,无论它们是否存在于答案表中。共有50个问题,但我只检索了49个。我做错了什么?
select
q.question_txt
from
apdev.form_template.question q
left join
apdev.form_submission.answer a on q.question_id = a.question_id
where
a.submission_id = 2704336
and q.form_id = 23
答案 0 :(得分:6)
经典错误。除第一个表之外的所有条件都需要进入on
子句:
select q.question_txt
from apdev.form_template.question q left join
apdev.form_submission.answer a
on q.question_id = a.question_id and a.submission_id = 2704336
where q.form_id = 23;
为什么呢? left join
在非匹配行中为NULL
生成submission_id
值。条件a.submission_id = 2704336
失败。虽然可以添加(a.submission_id = 2704336 or a.submission_id is null)
,但它没有相同的语义。这对你来说是一个很好的练习,可以找出解决问题的原因。