给定两个表,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中文网其他相关文章!