繁体   English   中英

MySQL-给定多个关联,如何获取多个记录的最新关联?

[英]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)

SQLFIDDLE

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM