집 >데이터 베이스 >MySQL 튜토리얼 >내 왼쪽 외부 조인이 왼쪽 테이블의 모든 행을 반환하지 않는 이유는 무엇입니까?
왼쪽 외부 조인: 왼쪽 테이블에서 완전한 데이터 검색 보장
왼쪽 외부 조인에 대한 일반적인 오해는 항상 왼쪽 테이블의 모든 행을 반환한다는 것입니다. 이것이 항상 사실은 아닙니다. 조인 조건에 따라 오른쪽 테이블에 일치하는 행이 없으면 왼쪽 테이블의 행은 생략됩니다.
예를 들어 설명해 보겠습니다. 특정 사용자(open_id)의 일일 페이지 조회수를 계산하도록 설계된 쿼리를 상상해 보세요.
<code class="language-sql">SELECT day.days, COUNT(*) AS views FROM day LEFT OUTER JOIN tracking ON day.days = DAY(FROM_UNIXTIME(open_date)) WHERE tracking.open_id = 10 GROUP BY day.days</code>
이 쿼리는 모든 날짜와 관련 조회수를 표시하려고 합니다. 그러나 day
에 해당 월의 모든 날짜에 대한 항목이 포함되어 있지만 tracking
에 open_id = 10
에 대한 항목이 며칠 동안 없으면 해당 날짜는 결과에서 제외됩니다.
해결책은 WHERE
절 조건을 조인의 ON
절에 통합하는 것입니다.
<code class="language-sql">SELECT day.days, COUNT(tracking.open_date) AS views FROM day LEFT OUTER JOIN tracking ON day.days = DAY(FROM_UNIXTIME(open_date)) AND tracking.open_id = 10 GROUP BY day.days</code>
tracking.open_id = 10
을 ON
절로 이동하면 조건이 조인 후 필터가 아닌 조인 자체의 일부가 됩니다. 이렇게 하면 day
테이블의 모든 행이 포함되고 views
테이블의 항목이 일치하지 않는 날에는 tracking
이 0으로 표시됩니다. 조회수를 정확하게 반영하려면 COUNT(tracking.open_date)
대신 COUNT(*)
을 사용하세요. COUNT(*)
오른쪽 테이블에 일치하는 행이 없더라도 여전히 날짜를 계산합니다.
위 내용은 내 왼쪽 외부 조인이 왼쪽 테이블의 모든 행을 반환하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!