> 데이터 베이스 > MySQL 튜토리얼 > 두 개의 SQL LEFT JOINS가 잘못된 방문 횟수를 반환하는 이유는 무엇입니까?

두 개의 SQL LEFT JOINS가 잘못된 방문 횟수를 반환하는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2025-01-23 12:27:10
원래의
270명이 탐색했습니다.

Why Are My Two SQL LEFT JOINS Returning Incorrect Visit Counts?

SQL LEFT JOIN 디버깅: 정확한 방문 횟수

SQL에서 여러 LEFT JOIN을 사용하여 여러 테이블의 방문 횟수를 계산할 때 일반적인 문제가 발생합니다. 이 예에서는 users, groceryfishmarket의 세 가지 테이블을 사용합니다. 각 사용자의 식료품점과 수산시장 방문 횟수를 계산하도록 설계된 쿼리는 부정확한 결과를 생성합니다.

이 문제는 조인의 순차적 특성에서 비롯됩니다. 순진한 접근 방식은 먼저 usersgrocery을 결합하여 null이 아닌 account_balance 및 식료품 방문이 포함된 각 사용자에 대한 행을 만듭니다. fishmarket을 사용한 후속 조인은 식료품점 방문 횟수와 각 사용자의 수산시장 방문 횟수를 잘못 곱합니다. 이로 인해 총 방문 횟수가 부풀려집니다.

해결책에는 테이블에 조인하기 전에users 방문 횟수를 집계하도록 쿼리를 재구성하는 것이 포함됩니다. 이는 두 개의 상관 하위 쿼리를 사용하여 효율적으로 수행됩니다. 각 하위 쿼리는 grocery 또는 fishmarket 테이블에 대한 방문수를 user_id별로 그룹화하여 독립적으로 계산합니다. 이렇게 집계된 횟수는 users 테이블에 결합되어 정확한 총 방문수를 보장합니다.

하위 쿼리를 사용하여 수정된 쿼리는 다음과 같습니다.

<code class="language-sql">SELECT u.id, u.account_balance, g.grocery_visits, f.fishmarket_visits
FROM users u
LEFT JOIN (
    SELECT user_id, COUNT(*) AS grocery_visits
    FROM grocery
    GROUP BY user_id
) g ON g.user_id = u.id
LEFT JOIN (
    SELECT user_id, COUNT(*) AS fishmarket_visits
    FROM fishmarket
    GROUP BY user_id
) f ON f.user_id = u.id
ORDER BY u.id;</code>
로그인 후 복사

이 수정된 쿼리는 각 사용자의 정확하고 독립적인 식료품점 및 수산시장 방문 횟수를 제공하여 원래 쿼리의 곱셈 오류를 해결합니다.

위 내용은 두 개의 SQL LEFT JOINS가 잘못된 방문 횟수를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿