2013-11-27 1 views
2

MySQL 쿼리에 문제가 있습니다. 사용자와 프로젝트라는 두 개의 테이블이 있습니다. 특정 프로젝트에서 프로젝트 이름과 사용자 수를 얻으려고합니다. 아래는 내가 사용하고있는 쿼리입니다. 합니다 (empProjId 프로젝트 테이블의 projId과 일치하는 사용자 테이블에 행이 없음) 프로젝트에 대한 작업에는 사용자가 없을 때 경우에 WHERE 조건 중 하나가 거짓 일 때 MySQL 쿼리가 null 값을 반환합니다.

SELECT b.projName AS project_name, 
     COUNT(a.empId) AS project_strength 
FROM users a, 
    projects b 
WHERE b.projName LIKE '%windows%' AND 
    (a.empProjId = b.projId) 

는, 나는, 비록 널 (null)로 프로젝트 이름을 얻을 프로젝트가 프로젝트 테이블에 존재하고 같은 절이 일치합니다. 이 경우 프로젝트 이름을 표시하고 개수를 0으로 설정합니다.

저는 초보자이며 가능 여부를 알지 못합니다. 어떤 도움이라도 대단히 감사 할 것입니다. 많은 감사.

+0

이미 데이터베이스에 대한 디자인 문제가 있습니다. 직원이 여러 프로젝트에 링크 될 수 있습니까? 나는 예 (프로젝트를 반드시 실행하는 것은 아니지만 오래된 것일 수도 있음)를 추정합니다. 이 경우 두 개의 필드 (projectId 및 userId)가있는 세 번째 테이블이 있어야 여러 프로젝트를 주어진 사용자에게 연결하고 여러 사용자를 특정 프로젝트 (= 다 대다 관계)에 연결할 수 있습니다. 나머지는 대답이 아마 당신을 도울 것입니다 ... –

+0

@Bartdude 귀하의 회신에 많은 감사드립니다. 예, 일부 사용자는 여러 프로젝트에서 작업 중일 수 있습니다. 이 사실을 명심하고 필요한 변경을 할 것입니다. –

답변

0

당신은 할 수 있습니다 :

SELECT b.projName AS project_name, 
     COUNT(a.empId) AS project_strength 
FROM projects b 
LEFT JOIN users a ON a.empProjId = b.projId 
WHERE b.projName LIKE '%windows%' 
GROUP BY b.projName 

LEFT JOIN은 사용자가 일치하지 않아도 항상 project_name을 가져옵니다.

+0

많은 감사합니다 .. 그게 .. –

0

"오른쪽"입력란에 일치하는 레코드가 있는지 여부에 관계없이 쿼리의 "왼쪽"(FROM 테이블)에서 관련된 모든 레코드를 DB가 반환하도록하려면 LEFT JOIN을 사용해야합니다. 쿼리의 측면합니다 (JOIN 에드 테이블) :

SELECT b.projName AS project_name, 
     COUNT(a.empId) AS project_strength 
FROM users a 
LEFT JOIN projects b ON a.empProjId = b.projID 
WHERE b.projName LIKE '%windows%' 

귀하의 "게으른 가입"버전의 해당하는 구문은 것

WHERE b.projName LIKE '%windows%' AND 
    ((a.empProjId = b.projId) OR (b.projID IS NULL)) 
+0

귀하의 회신에 많은 감사드립니다. 조인 순서를 교환 한 후 위의 작업이 수행되었습니다. 나는'프로젝트 B LEFT JOIN 사용자에게' –

2

왼쪽 가입과 그룹 별 개수를 사용해야합니다.

SELECT b.projName AS project_name, 
     count(b.projName) AS project_strength 
    FROM projects b LEFT JOIN 
     users a ON (b.projId = a.empProjId) 
WHERE b.projName LIKE '%windows%' 
group by b.projName 
+2

+1 당신은 "GROUP BY"를 추가했습니다. –

+0

답장을 보내 주셔서 감사합니다. 그것은 작동합니다. –

관련 문제