问题
用户试图检索属于某个玩家的列表给定年份范围内的特定团队。最初提出的查询如下:
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中文网其他相关文章!