집 >데이터 베이스 >MySQL 튜토리얼 >SQL 쿼리에서 누락된 IN 값에 대한 기본 결과를 반환하는 방법은 무엇입니까?
SQL 쿼리에서 누락된 IN 값을 처리하기 위한 기본 결과
SQL에서는 IN 쿼리를 사용하여 값 집합을 기준으로 행을 필터링합니다. 그러나 동적 쿼리에 사용되는 경우 IN 목록의 일부 값이 데이터베이스에 해당 레코드가 없을 수 있는 상황을 처리해야 할 수도 있습니다. 이로 인해 해당 값에 대한 빈 행이 생성되며 이는 후속 처리 또는 데이터 표시에 영향을 미칩니다.
이 문제를 해결하려면 LEFT JOIN을 사용하여 쿼리를 다시 작성하는 것이 좋습니다. LEFT JOIN의 WHERE 절에서 ON 절로 조건을 이동하면(제공된 샘플 코드 참조) IN 목록의 모든 값이 결과 집합에 포함되는지 확인할 수 있습니다. 이는 LEFT JOIN이 오른쪽 테이블에 일치하는 행이 없더라도 왼쪽 테이블의 모든 행을 반환하기 때문입니다.
예:
다음과 같은 간단한 쿼리를 고려해 보세요.
<code class="language-sql">SELECT Name, ID, SUM(Minutes) AS MinutesOnline FROM UserTable LEFT JOIN OnlineUseage ON OnlineUseage.ID = UserTable.ID WHERE UserTable.ID IN (332, 554, 5764, 11, 556, ...)</code>
이 쿼리에서는 OnlineUseage.Date >= '2016-01-01 00:00:00' AND OnlineUseage.Date
조건이 생략되었습니다. 완전성을 위해 JOIN 조건에 포함해야 합니다.
개선된 쿼리는 다음과 같습니다.
<code class="language-sql">SELECT Name, ID, IFNULL(SUM(Minutes), 0) AS MinutesOnline FROM UserTable LEFT JOIN OnlineUseage ON OnlineUseage.ID = UserTable.ID AND OnlineUseage.Date >= '2016-01-01 00:00:00' AND OnlineUseage.Date < CURRENT_TIMESTAMP WHERE UserTable.ID IN (332, 554, 5764, 11, 556, ...)</code>
이제 OnlineUseage
테이블에 해당 레코드가 없는 IN 목록의 모든 값에 대해 LEFT JOIN은 해당 열에 대해 NULL 값을 반환합니다. 그런 다음 IFNULL 함수를 사용하여 NULL 값을 기본값(이 경우 0)으로 바꿀 수 있습니다.
이 접근 방식은 IN 목록의 모든 값이 결과 집합에 포함되도록 하고 지정된 기준을 충족하지 않는 값에는 적절한 기본값을 할당합니다. CURRENT_TIMESTAMP
은 쿼리의 올바른 실행을 보장하기 위해 원본 텍스트의 모호한 <p>Now
을 대체하는 데 사용됩니다.
위 내용은 SQL 쿼리에서 누락된 IN 값에 대한 기본 결과를 반환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!