2016-06-10 2 views
1

많은에서 해당 비 해당 값을 얻기 :다음과 같이 나는 테이블 구조를 가지고 많은 표

브랜드 => 여러 테이블에 많은입니다

기록] < = 사용자

을 역사와이 값을 포함

brandId, userId and points 

나는 USER SCORED가 가리키는 포인트가있는 모든 브랜드와 사용자가 해당 가치가없는 모든 브랜드를 얻어야합니다.

사람이 나를 도울 수 ...

brandId => 1 (has corresponding value) => 5 points 
brandId => 2 (no corresponding value) => null (column points is null) 

등 ?? : 그것은 다음과 같이 보일 것입니다

편집 :

안녕 고든, 나는 같이 당신의 쿼리를 수정했습니다

select b.*, sum(h.points) as points 
from brands b left join 
    histories h 
    on b.id = h.brandId 
    and h.userId = 2866 and h.brandId = 2 
group by h.brandId 

내가 그래서 두 번째 조건 h.brandID = 2 // 또는 다른 값이 필요합니다 레코드가없는 경우 한 번에 1 개의 레코드 만 반환합니다. 열 포인트가 null 인 경우 해당 열을 모두 표시해야합니다.

답변

0

I left joingroup by :

을 원하는 것으로 생각하세요.
select b.brandId, sum(h.points) 
from brands b left join 
    histories h 
    on b.brandid = h.brandid and h.userId = $userId 
group by b.brandId; 

histories에 행이 없으면 값은 NULL이됩니다.

편집 :

select b.*, sum(h.points) as points 
from brands b left join 
    histories h 
    on b.id = h.brandId and 
     h.userId = 2866 and h.brandId = 2 
group by b.brandId; 
:

당신이 left join를 사용하는 경우, 다음 group by 첫 번째 테이블의 컬럼에 있어야합니다

관련 문제