2017-04-06 1 views
0

回答テーブルに存在するかどうかに関係なく、質問テーブルからすべてのレコードを取得しようとしています。一緒に50の質問がありますが、私は49を検索しています。何が間違っていますか?SQL Serverは結合が空白のエントリを返さないようにしました

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 

答えて

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は、一致しない行にsubmission_idの値NULLを生成します。条件a.submission_id = 2704336が失敗します。 にはを追加できますが、(a.submission_id = 2704336 or a.submission_id is null)を追加しても、同じセマンティクスはありません。なぜそれが問題を解決しないのかを理解するのは良い練習です。

+0

私は確かにそれを試みたと思った。私は何か他のものを持ち上げていたに違いない。どうもありがとうございました。 – nikotromus

関連する問題