대신 RIGHT JOIN
마십시오. 시도해보십시오.
SELECT type.id, type.name, COUNT(page.type) AS tot
FROM page
RIGHT JOIN type ON page.type=type.id
GROUP BY type.id
다른 계산 방법에 유의하십시오. 페이지 유형은 페이지가없는 유형의 경우 NULL
이됩니다. 이러한 행은 무시 될 것입니다. COUNT
[EDIT] 다음은 예입니다. 우리는 데이터를 다음과 같은 경우 : 우리가 JOIN
내 대답처럼 할 경우
type
id name
1 A
2 B
3 C
page
id type
1 1
2 1
3 2
는 (더 GROUP BY
또는 COUNT
), 우리의 결과 집합은 다음과 같을 것 :
type.id type.name page.id page.type
1 A 1 1
1 A 2 1
2 B 3 2
3 C NULL NULL
을 이제 우리는 GROUP BY
을 수행 할 때 및 COUNT(type.id)
, 행 여기서 count.id NULL이 아닌 계산됩니다. 즉, 모든 행 같습니다 결과는 B와 C에 대한 1 2 우리가 대신 COUNT(page.type)
을 할 경우
, 우리는 C에 대한 A, B 1 0 2를 얻을 수 (page.type
때문에 NULL
는 C에 대한했다 !)
나는 이것을 올바르게 사용하기 전에 count (*)를 사용했다. 누락 된 유형은 2를 카운트로 반환했다. 당신이 말한 것처럼 count (page.type)를 사용하면 0이됩니다. 왜 이런 일이 발생합니까? – DisgruntledGoat
count (type.id)를 사용하면 2를 반환하는 것처럼 보입니다. – DisgruntledGoat
'COUNT (*)'는 모든 행을 계산합니다. 'COUNT (page.type)'는 page.type이 NULL이 아닌 행만 계산합니다. 내 대답에 JOIN을 할 때,'pages'를 가지지 않는'types' 행은 모든'page' 컬럼을 NULL로 설정합니다. 우리가'COUNT (page.type)'을 할 때,'pages'를 가진'types' 행만을 계산합니다 (페이지 열은 null이 아닙니다). – hrnt