SQL LEFT JOIN 디버깅: 정확한 방문 횟수
SQL에서 여러 LEFT JOIN
을 사용하여 여러 테이블의 방문 횟수를 계산할 때 일반적인 문제가 발생합니다. 이 예에서는 users
, grocery
및 fishmarket
의 세 가지 테이블을 사용합니다. 각 사용자의 식료품점과 수산시장 방문 횟수를 계산하도록 설계된 쿼리는 부정확한 결과를 생성합니다.
이 문제는 조인의 순차적 특성에서 비롯됩니다. 순진한 접근 방식은 먼저 users
및 grocery
을 결합하여 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!