문제
사용자가 특정 연도 범위 내의 특정 팀. 처음 제안된 쿼리는 다음과 같습니다.
SELECT * FROM contract JOIN team USING (name_team) JOIN player USING(name_player) WHERE name_team = ? AND DATE_PART('YEAR',date_join)>= ? AND DATE_PART('YEAR',date_leave)<= ?
그러나 이 쿼리는 날짜 범위가 겹치는 것을 효과적으로 식별하지 못합니다.
올바른 해결 방법
겹치는 날짜 범위를 정확하게 확인하려면 다음 사항을 고려하도록 쿼리를 수정해야 합니다. 기준:
최적화된 쿼리
다음 쿼리는 보다 정확한 솔루션을 제공합니다.
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'); -- upper bound excluded
설명
추가 고려 사항
위 내용은 플레이어 팀 멤버십에 대해 PostgreSQL에서 겹치는 날짜 범위를 식별하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!