2012-08-13 5 views
2

B 열 (users_groups)의 해당 사용자 수와 함께 테이블 A (그룹)의 모든 항목에 대한 간단한 목록을 반환하려고합니다. 내가 어디로 잘못 가고 있는지 알아 내지 못한다.왼쪽 수가 0 인 행을 반환하지 않는 외부 조인

SELECT groups.gid, name, COUNT(uid) AS groupcount 
FROM groups 
LEFT OUTER JOIN users_groups ON groups.gid = users_groups.gid 
WHERE aid = ? 

현재 두 개의 그룹 중 하나에 세 명의 사용자가 있습니다. 그 행은 groupcount에서 적절한 값으로 반환되지만, 나는 groupcount가 0 인 두 번째 행을 표시해야합니다. 누구든지 올바른 방향으로 나를 가리킬 수 있습니까? 감사!

답변

2

아마도 원조가 users_groups이고 그룹이 아니기 때문일 수 있습니다.

왼쪽 외부 조인은 NULL 인 행을 만듭니다. "is null"이외의 비교는 일치하지 않습니다.

당신은 뭔가를 수행하여이 문제를 해결할 수 있습니다

where coalesce(aid, ??) = ?? 

을 그 쿼리의 의도 경우.

또는 다른 방법으로는 쿼리에 그룹을 지정하지 않아도됩니다. 이것을 시도하십시오 :

SELECT groups.gid, name, COUNT(uid) AS groupcount 
FROM groups LEFT OUTER JOIN 
    users_groups 
    ON groups.gid = users_groups.gid 
WHERE aid = ? 
group by groups.gid, name 

Mysql에는 SELECT 절에 집계되지 않은 열을 포함 할 수 있다는 단점이 있습니다. 그러나 그룹에 속한 것만으로 그룹화됩니다. 그룹화를 지정하지 않았으므로 모든 데이터에 대해 하나의 행을 생성합니다. gid와 name의 값은 입력 값에서 임의로 선택됩니다.

+0

아니요, 내 쿼리에서 더 자세히 설명 했어야합니다. - aid가 groups 테이블에 있고 WHERE groups.aid =를 지정 했습니까? 도움이 안돼. –

+0

아, 그건 짐작할 수 있겠 군! 무리 감사! –

+0

나는 비슷한 문제가 있었다. 중요한 비트는 두 번째 테이블에서 내 케이스의 county (.....) 안에있는 물건이었습니다. – Yar

관련 문제