2017-02-15 5 views
0

현재 두 번째 테이블의 일일 통계를 비롯한 글로벌 통계가 포함 된 한 테이블에서 개체를 가져 오려고합니다. 이를 위해 statsTable에 'oID'및 'Date'열의 일치하는 행이 포함되어있는 한 다음과 같은 조인 - 쿼리를 사용합니다.폴백 값을 사용하여 두 개의 테이블에서 열 가져 오기

SELECT 
    o.ID as ID, 
    o.Image as Image, 
    o.Text as `Text`, 
    o.Views as `Views`, 
    o.Clicks as Clicks, 
    COALESCE(s.Views, 0) as DayViews, 
    COALESCE(s.Clicks, 0) as DayClicks 
FROM objectTable o 
LEFT JOIN statsTable s 
ON o.ID = s.oID 
WHERE o.userID = 1 
    AND DATEDIFF(CURDATE(), s.Date) < 1 
LIMIT 1 

은 어떻게 statsTable가 일치하는 행을 포함하지 않는 경우에도 결과 행을 얻을 수있는 쿼리를 변경해야합니까?

쿼리에서 오류가 발생하지 않습니다. objectTable에 데이터가 있는지 확실히 알고 있으므로 빈 결과를 반환하지 않으려합니다.

+0

이미 왼쪽 가입을 사용하고 있습니다. 그것은 ans입니다. 내가 이미 말한대로 상태가 –

+0

이 아닌지 확인하십시오. 예 : 왼쪽 가입 작업 ** ** statsTable에 가입 ​​할 데이터가있는 경우. 그러나 데이터가 없어도 결과를 원합니다. 'Where' 대신 무엇을 사용해야합니까? – DosMike1

답변

1

당신은 단지 ON 절에 s 테이블에 조건을 이동해야 다음 ON 절은 사실에 여부를 평가 여부

SELECT o.ID as ID, o.Image as Image, o.Text as `Text`, 
     o.Views as `Views`, o.Clicks as Clicks, 
     COALESCE(s.Views, 0) as DayViews, 
     COALESCE(s.Clicks, 0) as DayClicks 
FROM objectTable o LEFT JOIN 
    statsTable s 
    ON o.ID = s.oID AND DATEDIFF(CURDATE(), s.Date) < 1 
WHERE o.userID = 1 ; 

LEFT JOIN 관계없이, 첫 번째 테이블의 모든 행을 유지합니다. 두 번째 표의 열은 일치하지 않는 행의 경우 NULL이며 WHERE 절이 필터링됩니다.

결과적으로 첫 번째 테이블의 조건은 WHERE 절에 있어야합니다. 후속 표의 조건은 ON 절 (LEFT JOIN)에 있어야합니다.

+0

훌륭한 깊은 지식 :) 당신에 대한 설명 하나 –

+0

이해하고 작동합니다. 대단히 감사합니다. – DosMike1