私は2つのテーブルを持っています:
表1:質問:
QuestionId NUMERIC
Title TEXT
質問表のテストデータ:
QuestionId Title
1 What is your name?
2 What is your age?
表2:回答:
AnswerId NUMERIC
PersonId NUMERIC
QuestionId NUMERIC
Answer TEXT
Answers TableにDATAがない場合、以下のクエリは正しい結果(2行)を返します。
SELECT q.QuestionId, q.Title, a.Answer
FROM Questions q
LEFT OUTER JOIN Answers a ON q.QuestionId = a.QuestionId
WHERE a.PersonId = 2 OR a.PersonId IS null
しかし、たとえば、回答テーブルに次のようなレコードが1つある場合:
AnswerId 1
PersonId 1
QuestionId 1
Answer 'My Name is Yaqub'
以下のクエリは正常に機能します。
SELECT q.QuestionId, q.Title, a.Answer
FROM Questions q
LEFT OUTER JOIN Answers a ON q.QuestionId = a.QuestionId
WHERE a.PersonId = 1 OR a.PersonId IS null
しかし、このクエリは1行だけを返します。
SELECT q.QuestionId, q.Title, a.Answer
FROM Questions q
LEFT OUTER JOIN Answers a ON q.QuestionId = a.QuestionId
WHERE a.PersonId = 2 OR a.PersonId IS null
上記のクエリは間違った1行だけを返します。これは、質問テーブルに2つの質問があり、条件'OR a.PersonId IS null'のため、上記のクエリは両方を返す必要があるためです。
なぜ2行を返さないのですか?
望ましい結果:
すべての質問(2行)と、PersonIdに値がある場合の回答を取得したいと思います。たとえば、回答テーブルに彼のデータがないため、Person2の場合は2行です。