我有这个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个其他表连接到此查询。
答案 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