Оставить соединение за три стола

У меня есть 3 таблицы следующим образом

ТАБЛИЦА A - Пользователь ответил

 user id    |   question id |   answer option id    |
   1        |           1   |               2       |
   1        |           2   |               1       |

Таблица B - Вопрос

question id | question text     |
1           | Question 1        |
2           | Question 2        |

ТАБЛИЦА С - ОТВЕТ

answer id   |   question id |   answer option id    |answer text                |
1           |   1           |                   1   |Question 1 answer 1        |
2           |   1           |                   2   |Question 1  answer 2       |
2           |   2           |                   1   |Question 2 answer 1        |
3           |   2           |                   2   |Question 2  answer 2       |

Я хочу узнать, какой пользователь дал какой ответ Результат должен выглядеть следующим образом

    1       |   Question 1  |   Question 1 answer 2     |
    1       |   Question 2  |   Question 2 answer 1     |

Я так пробовал

SELECT * FROM A
LEFT JOIN B ON A.question_id = B.question_id
LEFT JOIN C ON A.answer_option_id = C.answer_option_id

Может ли кто-нибудь здесь помочь мне?

2 ответа

Вам не хватает гарантии, что последнее присоединение получит ответы на правильный вопрос.

Попробуй это:

SELECT * FROM A 
LEFT JOIN B ON A.question_id = B.question_id
LEFT JOIN C ON A.answer_option_id = C.answer_option_id AND A.question_id = C.question_id

Вам нужно добавить группу по questionid, иначе она будет возвращать 4 строки для каждой в таблице ответов.

select a.userid, b.Qtext, c.Atext from answered a 
join quest b on a.qid=b.qid 
left join answer c on a.optid=c.optid and a.qid=b.qid  group by a.qid;

Выход:

+--------+------------+---------------------+
| userid | Qtext      | Atext               |
+--------+------------+---------------------+
|      1 | question 1 | question 1 answer 2 |
|      1 | question 2 | question 1 answer 1 |
+--------+------------+---------------------+
Другие вопросы по тегам