2011-10-14 6 views
1

나는이 시험 테이블과 응답 테이블을 가지고있다. 나는 시험을위한 시험 = 000,663MYSQL Join Confusion

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을 고려해야하지 않습니까?

나는이 쿼리에 3 개의 다른 테이블을 합치면 where 절을 사용하지 않았다.

+0

당신은 where 절, 그것은 아무 문제도 서로 – Andre

+0

는'RESPONSES.exam_id_fk' 럼의 데이터 유형 무엇 조인, 없다를 사용해야합니다? –

답변

4

000663 조건은 JOIN 관계 조건이 아닌 WHERE 절에 속합니다. 이 (하위 쿼리로) 다른 테이블을 조인하더라도 여전히 WHERE 절을 사용할 수 있습니다. E.id 가정

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

-1 : INNER JOIN을 사용할 때 WHERE 대 JOIN의 ON 절을 사용하는 경우에는 차이가 없습니다. OUTER JOIN의 경우는 그렇지 않습니다 ... –

0

는 이그 자메 (Exame) ID입니다 및 r.exam_id_fk 또한 시험 ID가 그것은 당신이 카테고리 ID를 같게하는 시험 ID에 합류 나타나고 조건이 있어야한다

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

을 시도하다 where 절에서

0

잘못된 열 이름을 사용하고있는 것 같습니다. AND r.exam_id_fk = 000663 대신 AND e.id = 000663을 사용하면 WHERE없이 쿼리가 작동합니다.

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