У меня есть таблица ответов, в которой перечислены возможные ответы на заданный вопрос.Левое соединение нескольких наборов таблиц
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
Я пытаюсь создать запрос MySQL, который будет показывать мне имя пользователя, ответ пользователя на вопрос 1 (может быть пустым) и ответ пользователя на вопрос 2 (может быть пустым). Я зацикливаюсь, потому что чувствую, что мне нужно группировать несколько LEFT JOINS вместе, но я получаю вывод, который дает мне один из ответов или тот же ответ в обеих колонках.
Вот что у меня есть на данный момент:
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
Любые мысли были бы очень оценены.
* Любые мысли? * Вы получаете то, о чем просили. user1 ответил «ДА» на вопрос 1. Пользователь1 не ответил на вопрос 2, поэтому отображается NULL, потому что PA2.text «Нет», но UA2.answer_ID для этого текста является нулевым. Таким образом, вы получаете NULL. Поэтому, если вам нужен список всех вопросов, их возможные ответы и ответ на каждый пользователь. вам нужно начать с вопросов, присоединиться к возможным ответам, а затем присоединиться к ответам пользователей. Правые соединения будут работать в этом месте, но вы должны выяснить правильный порядок. Чтобы на самом деле предоставить ответ, мне нужно знать, какой результат вы хотите. – xQbert
Что такое «группа», намеревающаяся выполнить? – Matthew
@xQbert проблема в том, что эти значения фактически не равны нулю. У пользователя 1 есть ответ на вопрос2. NULL должны показывать значения, потому что каждый из этих пользователей в этом примере ответил на оба вопроса. (хотя поддельные данные, которые я показываю, могут на самом деле не отражать это) – Chris