Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mencari Pemain dengan Betul dalam Pasukan Dalam Julat Tahun Tertentu dalam PostgreSQL?
Mencari Julat Tarikh Bertindih dalam PostgreSQL
Anda telah memberikan pertanyaan yang cuba mencari semua pemain yang berada dalam pasukan tertentu dalam tahun tertentu, tetapi ia tidak berfungsi dengan betul. Mari kita selesaikan isu yang anda hadapi dan sediakan penyelesaian alternatif untuk mencari julat tarikh yang bertindih.
Masalah dengan Pertanyaan Asal:
Pertanyaan Betul:
Untuk mencari semua pemain pasukan tertentu yang menyertai sebelum 2010 dan tidak pergi sebelum 2009, anda boleh menggunakan yang berikut pertanyaan:
SELECT DISTINCT p.* FROM team AS t JOIN contract AS c ON t.name_team = c.name_team JOIN player AS p ON c.name_player = p.name_player WHERE t.name_team = ? AND c.date_join < '2010-01-01' AND c.date_leave >= '2009-01-01';
Pertimbangan Tambahan:
AND (c.date_leave >= '2009-01-01' OR c.date_leave IS NULL)
Menggunakan Operator OVERLAPS:
PostgreSQL juga menyediakan operator OVERLAPS, yang boleh digunakan untuk mencari julat bertindih. Pertanyaan berikut menggunakan OVERLAPS untuk mencari pemain yang bertindih dengan julat '2009-01-01', '2010-01-01':
SELECT DISTINCT name_player FROM contract WHERE name_team = ? AND (date_join, COALESCE(date_leave, CURRENT_DATE)) OVERLAPS ('2009-01-01', '2010-01-01');
Menggunakan Jenis Julat:
Dalam PostgreSQL 9.2 atau lebih baru, anda boleh menggunakan jenis julat untuk mewakili julat tarikh. Ini memberikan prestasi yang lebih baik dan membolehkan sokongan indeks yang lebih mudah.
CREATE TYPE date_range AS RANGE (date, date); CREATE INDEX mv_stock_dr_idx ON mv_stock USING gist (daterange(date_join, date_leave)); SELECT DISTINCT name_player FROM contract WHERE name_team = ? AND daterange(date_join, date_leave) &&& daterange('[2009-01-01,2010-01-01)'); -- upper bound excluded
Atas ialah kandungan terperinci Bagaimana untuk Mencari Pemain dengan Betul dalam Pasukan Dalam Julat Tahun Tertentu dalam PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!