問題
用戶試圖檢索屬於某個玩家的列表給定年份範圍內的特定團隊。最初提出的查詢如下:
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中文網其他相關文章!