Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mendapatkan Status Terkini dengan Cekap untuk Setiap Perkhidmatan Menggunakan SQL Joins?
Menyertai Jadual dan Mengehadkan Keputusan dalam SQL
Dalam SQL, kita selalunya perlu mendapatkan data daripada berbilang jadual. Satu cara untuk melakukan ini ialah melalui gabungan dalaman, yang menggabungkan rekod daripada dua jadual berdasarkan medan biasa. Selain itu, kami mungkin perlu mengehadkan keputusan kepada bilangan rekod tertentu.
Cabaran:
Mari kita pertimbangkan senario berikut: kami mempunyai dua jadual, Perkhidmatan dan Status . Jadual Perkhidmatan mengandungi nama perkhidmatan dan ID, manakala jadual Status mengandungi status dan ID perkhidmatan yang menjadi miliknya. Kami ingin mendapatkan semula status terkini untuk setiap perkhidmatan.
Penyelesaian Awal:
Satu percubaan untuk menyelesaikan masalah ini ialah menggunakan pernyataan SQL berikut:
SELECT ser.id, ser.name, a.status, a.timestamp from Service ser inner join (select * from status order by Status.timestamp DESC limit 1) as a on a.service_id = ser.id
Walau bagaimanapun, kenyataan ini hanya mendapatkan semula status terkini untuk satu perkhidmatan, bukan semua mereka.
Penyelesaian Dioptimumkan:
Untuk mendapatkan hasil yang betul, kami boleh menggunakan pertanyaan bersarang untuk mencari cap masa maksimum bagi setiap perkhidmatan. Subquery ini kemudiannya digunakan dalam cantuman dalaman untuk memilih rekod yang dikehendaki:
SELECT ser.id, ser.name, s.status, s.timestamp FROM Service ser INNER JOIN status as s ON s.service_id = ser.id INNER JOIN ( SELECT service_id, MAX(timestamp) AS MaxDate FROM status GROUP BY service_id ) AS a ON a.service_id = s.service_id AND a.MaxDate = s.timestamp;
Penjelasan:
Subquery mencipta jadual baharu dengan memilih cap masa maksimum untuk setiap ID perkhidmatan. Jadual ini kemudiannya digunakan dalam cantuman dalaman dengan jadual asal untuk mendapatkan semula rekod dengan cap masa terkini.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Status Terkini dengan Cekap untuk Setiap Perkhidmatan Menggunakan SQL Joins?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!