Оставить соединение за три стола
У меня есть 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 |
+--------+------------+---------------------+