2014-07-04 2 views
0

가입 I 다음 MySQL의 코드가 있습니다MySQL의 왼쪽 NULL 문제

작업 쿼리

SELECT name, AVG(q1) AS avg 
FROM respondents 
LEFT JOIN results_new ON respondents.login_id = results_new.company 
WHERE respondents.brand = 'ABC' 
AND results_new.sdate = 'MAY2014' 
GROUP BY name 
ORDER BY avg 
DESC 

제대로 위의 작품, 그것은 다시 35 개 행을 제공하고 올바르게 이름과 평균을 표시합니다.

비 작업 쿼리

SELECT name, AVG(q1) AS avg 
FROM respondents 
LEFT JOIN results_new ON respondents.login_id = results_new.company 
WHERE respondents.brand = 'ABC' 
AND results_new.sdate = 'NOV2014' 
GROUP BY name 
ORDER BY avg 
DESC 

위의 반환 zero 결과 -`NOV2014 '에 대한 테이블에 데이터가 없기 때문에 올바른 것입니다.

그러나 나는 각각의 이름 옆에 nameNULL과 함께 35 개의 행을 반환하는 쿼리가 발생한다고 예상했습니다. 분명히 내 JOIN이 올바르지 않다고 생각하지만 잘못 가고있는 부분을 해결할 수는 없습니다.

모든 조언을 환영합니다.

+0

WHERE' 절에서 왼쪽으로 조인 된 테이블의 열을 사용하면 왼쪽 조인이 내부 조인으로 변경됩니다. 이 조건을 조인 절에 추가해야합니다. – VMai

답변

5

where 절은 연결된 테이블의 데이터를 필터링하므로 left joininner join으로 바꿉니다. 이 조건을 조인의 on 절에 넣으십시오.

SELECT name, AVG(q1) AS avg 
FROM respondents 
LEFT JOIN results_new ON respondents.login_id = results_new.company 
         AND results_new.sdate = 'NOV2014' 
WHERE respondents.brand = 'ABC' 
GROUP BY hotel_name 
ORDER BY avg DESC 
+0

Voila .... 감사합니다! 완벽하고 많은 감사를드립니다. –