> 데이터 베이스 > MySQL 튜토리얼 > 여러 SQL LEFT JOIN이 잘못된 방문 횟수를 생성하는 이유는 무엇입니까?

여러 SQL LEFT JOIN이 잘못된 방문 횟수를 생성하는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2025-01-23 12:18:09
원래의
695명이 탐색했습니다.

Why Do Multiple SQL LEFT JOINs Produce Incorrect Visit Counts?

여러 SQL LEFT JOIN을 사용한 부정확한 방문 횟수 이해

이 문서에서는 일반적인 SQL 쿼리 문제인 여러 LEFT JOIN 작업을 사용할 때 잘못된 방문 횟수를 얻는 문제를 조사합니다. 목표는 계좌 잔액, 식료품점 방문, 수산시장 방문을 포함한 사용자 데이터를 검색하는 것입니다. 순진한 쿼리는 부풀려진 결과(예: "1", "12", "12")를 생성하는 경우가 많습니다.

문제는 LEFT JOIN을 왼쪽에서 오른쪽으로 실행하는 데서 발생합니다. 조인된 테이블에 일치하는 항목이 여러 개 있는 경우 각 후속 조인은 행 수를 곱합니다. 예를 들어 식료품점 세 개를 한 명의 사용자에게 결합하면 세 개의 행이 생성됩니다. 이후 4개의 수산시장 테이블을 조인하면 12개의 행으로 확장되어 방문 횟수가 부정확해집니다.

해결책: 하위 쿼리를 사용한 사전 집계

이 솔루션은 각 테이블을 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>
로그인 후 복사

COALESCE로 누락된 값 처리

사용자가 특정 위치를 방문하지 않은 경우를 적절하게 처리하기 위해 COALESCE 함수는 NULL 값을 0(또는 원하는 다른 값)으로 바꿀 수 있습니다.

<code class="language-sql">SELECT u.id, u.account_balance, COALESCE(g.grocery_visits, 0) AS grocery_visits, COALESCE(f.fishmarket_visits, 0) AS 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>
로그인 후 복사

이 향상된 쿼리는 각 사용자의 식료품점 및 수산시장 방문 횟수를 정확하게 반영합니다. 데이터를 사전 집계함으로써 계단식 LEFT JOIN의 위험을 방지하고 정확한 결과를 보장합니다.

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

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