用于检索一对多关系中最新记录的 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中文网其他相关文章!