주어진 질문에 대한 가능한 대답을 나열한 응답 표가 있습니다. 그런 다음여러 테이블 조인 왼쪽 왼쪽
possible_answer
id question_id text
1 1 yes
2 1 no
3 2 red
4 2 blue
5 2 green
I 사용자가 내가 나에게 사용자 이름을 표시합니다 MySQL의 쿼리를 만들려고하고
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 일 수 있음)이 표시됩니다. 여러 개의 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
나는 주어진 사용자에 대한 두 질문에 대한 항목이 있다는 것을 알게되면.
username pa1.text pa2.text
user1 yes NULL
user1 NULL red
user2 no NULL
user2 NULL NULL
user3 no NULL
user3 NULL blue
: 나는 (의도 된 결과에 그렇다고 가까운)이 같은 결과를 얻고 있었다
group by
을 가지고 있지 않았지만 그들은 패턴의 모든 종류를 표시하는 표시되지 않은 경우 때문에
는 내가 거기에
group by
이
의견을 보내 주시면 감사하겠습니다.
* 어떤 생각을 했습니까? user1은 질문 1에 "예"라고 대답했습니다. User1은 질문 2에 대한 응답이 없으므로 PA2.text가 "아니요"이지만 UA2.answer_ID는 해당 텍스트에 대해 NULL이므로 NULL이 표시됩니다. 따라서 당신은 NULL을 얻습니다. 따라서 모든 질문의 목록, 가능한 대답 및 각 사용자가 제공 한 답변에 대해 알고 있다면 당신은 질문으로 시작, 가능한 답변에 가입을 왼쪽, 그리고 나서 사용자 답변에 왼쪽으로 가입해야합니다. 오른쪽 조인은이 위치에서 작동하지만 올바른 순서를 알아 내야합니다. 실제로 답변을 제공하려면 원하는 출력을 알아야합니다. – xQbert
달성하려는 '그룹'은 무엇입니까? – Matthew
@xQbert 문제는 그 값이 실제로 null이 아니라는 것입니다. User1은 question2에 대한 답변을 가지고 있습니다. 이 예에서 각 사용자가 두 질문에 모두 응답했기 때문에 NULL이 값을 표시해야합니다. (내가 보여주고있는 가짜 데이터가 실제로 반영되지는 않았을지라도) – Chris