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