SQL 中的連接表和限制結果
在 SQL 中,我們經常需要從多個表中檢索資料。實現此目的的一種方法是透過內部聯接,它根據公共欄位組合兩個表中的記錄。此外,我們可能需要將結果限制為特定數量的記錄。
挑戰:
讓我們考慮以下場景:我們有兩個表,Service 和 Status 。服務表包含服務名稱和 ID,而狀態表包含狀態及其所屬服務的 ID。我們想要檢索每個服務的最新狀態。
初始解決方案:
解決此問題的一種嘗試是使用以下 SQL 語句:
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
但是,該語句只檢索一項服務的最新狀態,而不是所有服務
最佳化方案:
為了得到正確的結果,我們可以得到正確的結果,我們可以獲得使用巢狀查詢來尋找每個服務的最大時間戳記。然後,在內部聯接中使用此子查詢來選擇所需的記錄:
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;
解釋:
子查詢透過選擇最大時間戳來建立一個新表每個服務ID。然後將該表用於與原始表的內部聯接,以檢索具有最新時間戳記的記錄。
以上是如何使用 SQL 連線高效率檢索每個服務的最新狀態?的詳細內容。更多資訊請關注PHP中文網其他相關文章!