Masalah
Seorang pengguna berusaha untuk mendapatkan semula senarai pemain yang dimiliki oleh pasukan tertentu dalam julat tahun tertentu. Pertanyaan yang dicadangkan pada mulanya adalah seperti berikut:
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)<= ?
Walau bagaimanapun, pertanyaan ini tidak mengenal pasti julat tarikh bertindih dengan berkesan.
Penyelesaian Betul
Kepada menentukan julat tarikh bertindih dengan tepat, pertanyaan mesti diubah suai untuk mempertimbangkan perkara berikut kriteria:
Pertanyaan Dioptimumkan
Pertanyaan berikut menyediakan penyelesaian yang lebih tepat:
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
Penjelasan
Pertimbangan Tambahan
Atas ialah kandungan terperinci Bagaimana untuk Mengenalpasti Julat Tarikh Bertindih dalam PostgreSQL untuk Keahlian Pasukan Pemain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!