我有一個答案表,列出了給定問題的可能答案。左連接多組表格
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