[英]MySQL - given multiple associations, how to get latest association for several records?
假设我有两个表(省略了不必要的行):
Table `pages`
page_id | page_key
1 | home
2 | about
和
Table `page_versions`
page_id | page_version | page_title | page_content
1 | 2 | Home | Lorem Ipsum...
1 | 4 | Home | Dolor Sit...
2 | 3 | About | Nunc Nisl...
2 | 5 | About | Proin Alt...
如果每个page
都有多个page_version
,如何查询数据库,以便获取所有与它们的最新page_version
相关的page
?
实质上:
page_id | page_key | page_version | page_title | page_content
1 | home | 4 | Home | Dolor Sit...
2 | about | 5 | About | Proin Alt...
我更喜欢将FROM子句中的子查询作为派生表执行 ,因此它将只运行一次子查询。
SELECT p.page_id, p.page_key, pv.page_version, pv.page_title, pv.page_content
FROM page_versions pv
INNER JOIN (SELECT page_id, MAX(page_version) AS page_version
FROM page_versions GROUP BY page_id) AS max_page_versions
USING (page_id, page_version)
INNER JOIN pages p USING (page_id);
与@FilipeSilva的答案进行比较,后者对外部查询的每一行执行一次相关的子查询。 这可能会降低性能。
您可以使用子选择首先进行连接,然后按页面版本对表进行排序,然后在其他选择组中对其进行排序
SELECT * FROM (
SELECT p.*, ps.`page_version`,ps.`page_title`,ps.`page_content` FROM `page` p
LEFT JOIN `page_versions` ps ON (p.`page_id`= ps.page_id)
ORDER BY ps.`page_version` DESC ) newpage
GROUP BY newpage.`page_id`
你可以做:
SELECT p.page_id, page_key, page_version, page_title, page_content
FROM pages p
INNER JOIN page_versions pv ON pv.page_id = p.page_id
WHERE page_version = (SELECT MAX(page_version)
FROM page_versions pv2
WHERE pv2.page_id = pv.page_id)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.