用於擷取一對多關係中最新記錄的 SQL 連線
資料庫查詢通常涉及從一對多關係中檢索最新條目。 想像一個包含「客戶」和「購買」表的資料庫;每次購買都屬於單一客戶。 此方法使用單一 SELECT 語句有效地擷取客戶清單及其最近的購買行為:
<code class="language-sql">SELECT c.*, p1.* FROM customer c JOIN purchase p1 ON (c.id = p1.customer_id) LEFT OUTER JOIN purchase p2 ON (c.id = p2.customer_id AND p1.date < p2.date) WHERE p2.customer_id IS NULL;</code>
說明:
效能最佳化:索引
為了獲得最佳效能,請使用欄位「(customer_id, date, id)」在「purchase」表上建立複合索引。這樣可以根據客戶、日期和 ID 進行高效率的資料庫搜尋。
非規範化權衡:
將上次購買日期儲存在「客戶」表中(非規範化)可以提高頻繁的上次購買查詢的效能。 然而,這引入了數據冗餘和潛在的完整性問題。
LIMIT 1 子句:較不可靠的替代方案
如果「購買」表 ID 始終按日期排序,則在子查詢中使用 LIMIT 1
可以簡化查詢。 但是,此方法的可靠性不如 LEFT OUTER JOIN 方法一致。 LEFT OUTER JOIN 方法因其穩健性而通常是首選。
以上是如何有效率地檢索一對多 SQL 關係中的最後一筆記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!