2011-08-16 4 views
3

SQL에서 두 개의 테이블을 조인하고 두 번째 테이블의 수를 얻으려고합니다. 두 번째 테이블에는 여러 개의 열이 있으며 그 중 세 개의 열이 함께 기본 키 역할을합니다. 나는() 인수 개수에 테이블 이름을 사용하는 박았 구만 얻을조인 된 테이블에 기본 키로 여러 열의 조합이있는 경우 조인 된 테이블의 COUNT()를 선택하는 방법?

SELECT times.*, COUNT(paylog.*) AS `total` 
FROM times 
LEFT JOIN paylog 
ON paylog.type = 'work' 
AND paylog.targetID = times.id 

:로 내 쿼리가 시작 당신은 당신의 SQL 구문에 오류가

; 사용할 올바른 구문 MySQL 서버 버전에 해당하는 설명서를 확인 근처 '*) LEFT는 paylog 가입 타임즈 total 그대로'하나의 고유 한 열이에 있었다면 라인 1

에서 페이 로그 테이블에서, 나는 여기에 주어진 조언을 따를 수 있었다 : Can I count number of rows in joined table? 그러나 그것은 사실이 아니다. paylog 테이블에서 조인 된 행의 수를 선택하려면 어떻게합니까? 하위 쿼리를 사용하면 현재 카운트를 얻고 조금 느려지므로 조인 할 필요가 있습니다.

답변

1

Count는 열의 비 null 값 수 또는 특수한 경우 count(*)의 결과 집합 행 수만 반환합니다. 즉 count(paylog.*)은 유효한 SQL이 아닙니다.

유효한 계산을 수행하기 위해 paylog 테이블에 고유 한 열이 필요하지 않습니다. 모든 열이 수행합니다. 조인이 성공하면 카운트가 증가하고 그렇지 않으면 열의 값이 널 (NULL)이되고 계수가 동일하게 유지됩니다.

각 행에 대해 페이로드에서 연결된 행 수를 얻으려면 group by times.id 절이 필요합니다.

관련 문제