SQL Server左连接不返回空白条目

时间:2017-04-06 15:36:05

标签: sql sql-server

我正在尝试从问题表中获取所有记录,无论它们是否存在于答案表中。共有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

1 个答案:

答案 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),但它没有相同的语义。这对你来说是一个很好的练习,可以找出解决问题的原因。