Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mendapatkan Status Terkini dengan Cekap untuk Setiap Perkhidmatan Menggunakan SQL Joins?

Bagaimana untuk Mendapatkan Status Terkini dengan Cekap untuk Setiap Perkhidmatan Menggunakan SQL Joins?

Patricia Arquette
Patricia Arquetteasal
2025-01-04 10:37:35861semak imbas

How to Efficiently Retrieve the Latest Status for Each Service Using 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn