PostgreSQL에서 겹치는 날짜 범위 찾기
당면 작업은 지정된 시간 내에 특정 팀과 관련된 플레이어 목록을 검색하는 것입니다. 액자. 제공된 쿼리는 이를 달성하려고 시도하지만 잘못된 논리와 중복 범위를 식별하는 방법에 대한 근본적인 오해로 인해 부족합니다.
원하는 시간 내에 플레이어를 정확하게 식별하는 쿼리를 생성하려면 몇 가지 주요 원칙이 필요합니다. 고려해야 합니다:
-
적절한 날짜 범위 비교: 원래 쿼리에 사용된 BETWEEN 연산자에는 다음이 포함됩니다. 상한. 이는 배타적이어야 하는 겹치는 범위를 처리할 때 올바르지 않습니다. 대신에 적절한 비교는 < 또는 = 하한과 상한 사이, 지정된 범위 내의 날짜만 캡처되도록 합니다.
-
NULL 값 고려 사항: 아직 팀을 떠나지 않은 플레이어의 경우 date_leave 열은 NULL일 수 있습니다. 쿼리는 중복 범위 비교에 NULL 값이 포함될 수 있도록 허용하여 이러한 가능성을 고려해야 합니다.
-
잠재적 중복 처리: 동일한 플레이어에 대해 여러 계약이 존재하는 경우 통합하는 것이 필수적입니다. 중복을 제거한 결과입니다. 고유한 플레이어 이름만 반환되도록 하기 위해 DISTINCT 키워드를 사용할 수 있습니다.
-
SQL OVERLAPS 연산자: PostgreSQL은 내장된 OVERLAPS 연산자를 제공합니다. 기간이 교차합니다. 이 연산자는 명시적인 날짜 비교의 필요성을 제거하여 쿼리를 단순화할 수 있습니다.
-
범위 유형: PostgreSQL 9.2 이상에서는 날짜 범위를 나타내는 데 특수한 범위 유형을 사용할 수 있습니다. 이러한 유형은 효율적인 중첩 범위 비교를 허용하고 쿼리를 최적화하는 데 활용할 수 있습니다.
이러한 원칙을 통합하여 제공된 수정된 쿼리는 원래 쿼리의 단점을 해결하고 특정 팀의 플레이어를 정확하게 식별합니다. 지정된 기간 내:
SELECT DISTINCT name_player
FROM contract
WHERE name_team = ?
AND (date_join, COALESCE(date_leave, CURRENT_DATE)) OVERLAPS
(date '2009-01-01', date '2010-01-01');
로그인 후 복사
위 내용은 PostgreSQL에서 특정 날짜 범위 내에서 팀의 플레이어를 효율적으로 찾는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!