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

nik*_*mus 0 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
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 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;
Run Code Online (Sandbox Code Playgroud)

为什么?的left join产生NULL为值submission_id在非匹配的行.条件a.submission_id = 2704336失败.虽然你可以添加(a.submission_id = 2704336 or a.submission_id is null),但它没有相同的语义.这对你来说是一个很好的练习,可以找出解决问题的原因.