簡體   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