2011-02-14 6 views
4

가 나는 사용자의 테이블에있는 경우 : ID, 유형, 이름MySQL의 왼쪽 가입 + 문제

및 기사의 테이블 : 아이디, writer_id, 상태

articles.writer_id = users.id합니다.

각 사용자의 이름이 WHERE type = 'writer'이고 status = 'assigned'인 기사가 얼마나 많은 지에 대한 표를 표시하고 싶습니다.

지금까지 내가 가진 :

SELECT u.name, COUNT(a.id) as count 
FROM users u LEFT OUTER JOIN articles a 
ON a.writer_id = u.id 
WHERE u.type = 'writer' AND a.status = 'assigned' 
GROUP BY u.name 

문제는,이 '그들과 관련된 assigned'-상태 기사를 0으로 작가를 표시하지 않습니다. 하위 쿼리가 필요하다고 확신하지만 무엇을해야할지 모르겠습니다. 미리 감사드립니다!

답변

9

LEFT JOIN을 사용 중이므로 a.status = 'assigned' 술어를 WHERE 절에서 JOIN 절로 이동하십시오.

SELECT u.name, COUNT(a.id) as count 
FROM users u LEFT OUTER JOIN articles a 
    ON a.writer_id = u.id 
    AND a.status = 'assigned' 
WHERE u.type = 'writer' 
GROUP BY u.name 

설명 : NULL = 'assigned' false로 평가합니다 때문에 WHERE의 술어를 떠나 NULL있을 것입니다 기사 a.status이없는 사용자, 들어, LEFT의 목적은 가입 패배.

+0

브릴리언트. 감사! – Charles

+0

+1하지만 FAQ에 넣을 수 있습니다. :) – GolezTrol

+0

감사합니다. –