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