3

我在 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

4

3 回答 3

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

有关SQL Fiddle 上的第二个查询,请参阅此示例,该查询返回:

ANSWER      TOTAL
Spain       10
Portugal    0
于 2012-06-27T11:59:42.557 回答
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;

使用左连接而不是内连接。

编辑:加入更新。

于 2012-06-27T11:57:34.793 回答
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

于 2012-06-27T12:38:10.227 回答