我有一个答案表,列出了给定问题的可能答案。左连接多组表格
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 JOIN分组在一起,但是我得到的输出给了我一个答案,或者两个列中都有相同的答案。
这里就是我在这一点上有:
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 2013-02-14 20:08:32
准备完成的'group by'是什么? – Matthew 2013-02-14 20:10:33
@xQbert问题是这些值实际上不是null。用户1确实有问题2的答案。 NULL应该显示值,因为在这个例子中,每个用户都回答了这两个问题。 (尽管我所展示的假数据可能并不真实反映这一点) – Chris 2013-02-14 20:19:42