2012-06-27 25 views
2

我在SQL命令中遇到問題。如果連接表中不存在,則顯示0的SQL命令

我有一個問題表,其他問題可能的答案和其他與用戶的答覆。

想象一下下面的例子:

問題1:誰將贏得半決賽?
Aswners:A)葡萄牙B)西班牙
回覆:10人投B)西班牙,0人投票A)葡萄牙

SELECT a.answer, COUNT(r.id) as total 
FROM replies r 
LEFT JOIN answers a ON a.id = r.id_answer 
LEFT JOIN questions q ON q.id = a.id_question 
WHERE q.id = 1 
GROUP BY r.id_answer 

我的觀點是從
SELECT結果得到:
西班牙10
葡萄牙0

但是我不能,我不知道該怎麼做,因爲我這樣做,我總是從答覆表上得到答案的結果。就像這樣:
西班牙10

回答

6

你將不得不從你的問題開始,並LEFT JOIN的答覆。

SELECT a.answer, COUNT(r.id_answer) AS total 
FROM questions q 
JOIN answers a ON (a.id_question = q.id) 
LEFT JOIN replies r ON (r.id_answer = a.id) 
WHERE q.id = 1 
GROUP BY a.id, a.answer 

根據您目前的查詢,你甚至都不需要question

SELECT a.answer, COUNT(r.id_answer) AS total 
FROM answers a 
LEFT JOIN replies r ON (r.id_answer = a.id) 
WHERE a.id_question = 1 
GROUP BY a.id, a.answer 

See this example爲您的SQL小提琴第二個查詢,返回:

ANSWER  TOTAL 
Spain  10 
Portugal 0 
+0

我已經嘗試過,並沒有工作 – costa

+0

究竟是行不通的? –

+0

@costa:什麼沒有用?我的意思是你期待什麼,你沒有得到什麼?請告訴彼得可以幫助你解決你的問題。 –

2
SELECT a.answer, COUNT(r.id) as total 
FROM questions q 
INNER JOIN answers a ON a.id_question = q.id 
LEFT JOIN replies r ON r.id_answer = a.id 
WHERE q.id = 1 
GROUP BY a.id; 

使用LEFT JOIN代替內連接。

編輯:加入更新。

+0

我編輯我的文章,我已經使用左加入。我忘了添加問題的重點,這是WHERE子句與q.id = 1 – costa

+0

這將仍然失敗,如果沒有答覆... –

+0

好吧,讓我更新答案,因爲你已經更新了問題現在。 – manurajhada

0

您的查詢應該是這樣 -

SELECT a.answer, COUNT(r.id) as total 
FROM questions q 
INNER JOIN JOIN answers a ON q.id = a.id_question 
LEFT JOIN REPLIES r ON a.id = r.id_answer 
WHERE 
q.id=1 
GROUP BY 
a.answer 

這裏最重要的是count(r.id)得到Portugal 0

相關問題