特定の質問に対する可能な回答をリストした回答の表があります。
possible_answer
id question_id text
1 1 yes
2 1 no
3 2 red
4 2 blue
5 2 green
次に、ユーザーが与えた回答の表があります
user_answer
id user_id answer_id
1 10 1
2 10 3
3 11 1
4 11 4
5 12 2
6 12 5
ユーザー名、質問 1 に対するユーザーの回答 (null の可能性があります)、および質問 2 に対するユーザーの回答 (null の可能性があります) を表示する MySQL クエリを作成しようとしています。複数の LEFT JOINS をグループ化する必要があるように感じて行き詰まりましたが、答えの 1 つ、または両方の列に同じ答えを与える出力を取得しています。
この時点で私が持っているものは次のとおりです。
SELECT u.name, pa1.text, pa2.text
FROM user u
LEFT JOIN user_answer ua1 ON u.id = ua1.user_id
LEFT JOIN possible_answer pa1 ON ua1.answer_id = pa1.id AND pa1.question_id = 1
LEFT JOIN user_answer ua2 ON u.id = ua2.user_id
LEFT JOIN possible_answer pa2 ON ua2.answer_id = pa2.id AND pa2.question_id = 2
GROUP BY u.id;
次のような結果を得ています。
username pa1.text pa2.text
user1 yes NULL
user2 no NULL
user3 NULL blue
特定のユーザーの両方の質問にエントリがあることがわかっている場合。
私がgroup by
そこに持っていなかったとき、私はgroup by
このような結果を得ていたので(これは意図した結果に少し近いです)、どのタイプのパターンも示していないようでした:
username pa1.text pa2.text
user1 yes NULL
user1 NULL red
user2 no NULL
user2 NULL NULL
user3 no NULL
user3 NULL blue
どんな考えでも大歓迎です。