給定兩個表,customer 和customer_data,其中後者包含客戶更改的歷史記錄,當前的任務是檢索客戶訊息,同時確保僅將customer_data 中的最新條目連接到客戶表中的每個客戶。
要實現此目的,請考慮利用WHERE 子句代替主查詢主體,因為它提供更好的效能和程式碼可讀性。這是一個最佳化的查詢:
SELECT c.*, CONCAT(title, ' ', forename, ' ', surname) AS name FROM customer c LEFT JOIN customer_data d ON c.customer_id = d.customer_id WHERE d.customer_id = ( SELECT MAX(customer_id) FROM customer_data WHERE customer_id = c.customer_id ) LIMIT 10, 20;
此查詢透過在 WHERE 子句中進行過濾,確保僅將 customer_data 中的最新行加入 customer 中的每個客戶。 LEFT JOIN 確保所有來自 customer 的客戶都包含在結果中,即使他們在 customer_data 中沒有相應的條目。
關於您對同時使用 CONCAT 和 LIKE 的擔憂,您是對的。 CONCAT 連接字串,產生的字串可以與 LIKE 運算子一起使用來執行模式匹配。您的查詢在這方面是有效的。
以上是如何有效率地連接 MySQL 歷史表中的最新行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!