MYSQL加入困惑

时间:2011-10-14 13:41:31

标签: mysql sql join aggregate-functions

我有这个Exams表和Responses表。我想获取考试考试的所有记录= 000663

SELECT COUNT(*)
  FROM Responses r  
  JOIN Exams E ON r.category_id_fk = E.id 
              AND r.exam_id_fk = 000663

实际上总共有106行只包含针对考试000663的回复。但它会返回所有考试的所有响应行!它不应该考虑r.exam_id_fk = 000663?

我没有使用where子句因为我有3个其他表连接到此查询。

3 个答案:

答案 0 :(得分:4)

000663条件属于WHERE子句,而不属于JOIN关系条件。即使您有其他表连接(作为子查询),您仍然可以使用WHERE子句。

select count(*)
from  Responses r  
join Exams E on r.category_id_fk = E.id 
WHERE r.exam_id_fk=000663;

答案 1 :(得分:0)

假设E.id是exame id而r.exam_id_fk也是考试ID,请尝试

select count(*)
from Exams e
left join Responses r on r.exam_id_fk = e.id
where e.id = 000663;

您似乎正在加入等于类别ID的考试ID,您的条件应该在where子句中

答案 2 :(得分:0)

我猜您使用的列名不正确。使用AND e.id = 000663代替AND r.exam_id_fk = 000663,这样您的查询就可以在没有WHERE的情况下运行。

SELECT COUNT(*)
FROM Responses r  
JOIN Exams E ON r.category_id_fk = E.id 
AND e.id = 000663