>데이터 베이스 >MySQL 튜토리얼 >내 왼쪽 외부 조인이 왼쪽 테이블의 일부 데이터만 반환하는 이유는 무엇입니까?

내 왼쪽 외부 조인이 왼쪽 테이블의 일부 데이터만 반환하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-23 16:08:10429검색

Why Does My Left Outer Join Only Return Partial Data From the Left Table?

왼쪽 테이블의 왼쪽 외부 조인 및 불완전한 데이터

조인 조건이 왼쪽 외부 조인 결과에 어떤 영향을 미치는지 이해하는 것이 중요합니다. 조건을 잘못 배치하면 왼쪽 테이블의 데이터가 불완전해질 수 있습니다.

이 쿼리를 살펴보겠습니다.

<code class="language-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;</code>

이 쿼리는 일일 페이지 열기 수를 계산하려고 합니다. 그러나 day 테이블에 더 많은 항목이 있더라도 며칠만 표시될 수 있습니다. 문제는 WHERE 절에 있습니다.

조인 조건ON day.days = DAY(FROM_UNIXTIME(open_date))이 날짜와 정확하게 일치합니다. 그러나 WHERE tracking.open_id = 10은 조인 이후를 필터링하여 open_id = 10 테이블에서 tracking이 없는 모든 날짜를 제거합니다.

의 일치 여부에 관계없이 왼쪽 표()의 day모든tracking일을 포함하려면 open_id 조건을 ON 절로 이동하세요.

<code class="language-sql">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;</code>

이 수정된 쿼리는 tracking이 있는 open_id = 10 테이블에 항목이 없는 날이 있더라도 모든 날짜가 포함되도록 보장하여 완전한 일일 페이지 열기 횟수를 제공합니다. COUNT(*)은 해당 날짜에 대해 0을 반환합니다.

위 내용은 내 왼쪽 외부 조인이 왼쪽 테이블의 일부 데이터만 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.