복붙노트

[SQL] 왼쪽 외부는 내 왼쪽 테이블에서 모든 행을 반환하지 않습니다하세요?

SQL

왼쪽 외부는 내 왼쪽 테이블에서 모든 행을 반환하지 않습니다하세요?

나는 다음과 같은 쿼리를 사용하여 하루 단위로 열립니다 페이지의 수를 얻기 위해 노력하고 있어요.

SELECT day.days, COUNT(*) as opens 
FROM day 
LEFT OUTER JOIN tracking ON day.days = DAY(FROM_UNIXTIME(open_date)) 
WHERE tracking.open_id = 10 
GROUP BY day.days

나는 그것을 얻을 출력은 이것이다 :

days opens
1   9
9   2

문제는, 내 하루 테이블에, 한 달에 일을 대표하는 30까지의 숫자를 포함하는 단일 컬럼을 가지고있다. 나는 왼쪽 외부 조인 않았고 나는 모든 일이 일 칼럼에 표시하도록 기대하고 있습니다!

하지만 내 쿼리가 그 일을하고, 그 이유는 될 수 있을까요?

덕분에 어떤 도움에 대한 모든.

해결법

  1. ==============================

    1.당신이 원하는 결과 (당신의 WHERE 절 제거합니다 행을)하지 않지만, 그것을 해결하기 위해 어떻게하지 왜 주어진 Nanne의 대답은 설명합니다.

    당신이 원하는 결과 (당신의 WHERE 절 제거합니다 행을)하지 않지만, 그것을 해결하기 위해 어떻게하지 왜 주어진 Nanne의 대답은 설명합니다.

    WHERE 용액을 변경하는 것 등을 조건 상태가 아니라 필터 조인 후에 적용 조인의 일부임을 :

    SELECT day.days, COUNT(*) as opens 
    FROM day 
    LEFT OUTER JOIN tracking
    ON day.days = DAY(FROM_UNIXTIME(open_date)) 
    AND tracking.open_id = 10 
    GROUP BY day.days
    

    이제 왼쪽 테이블의 모든 행은 결과에있을 것입니다.

  2. ==============================

    2.당신은 그래서 그들은 나타나지 않을 것이다, 연결된 tracking.open_id 그것이 NULL이됩니다 다른 행 10.이어야 지정!

    당신은 그래서 그들은 나타나지 않을 것이다, 연결된 tracking.open_id 그것이 NULL이됩니다 다른 행 10.이어야 지정!

  3. from https://stackoverflow.com/questions/4707673/left-outer-join-doesnt-return-all-rows-from-my-left-table by cc-by-sa and MIT license