簡體   English   中英

MYSQL來自多個表連接的前N行

[英]MYSQL top N rows from multiple table join

比如,sql server 2005中有top關鍵字,如果我在多個表上加入並想要檢索每個ID /列的極值,如何在mysql中選擇前1行。 限制限制了號碼。 行返回,所以它無法解決我的問題。

SELECT  v.*
FROM    document d
OUTER APPLY
        (
        SELECT  TOP 1 *
        FROM    version v
        WHERE   v.document = d.id
        ORDER BY
                v.revision DESC
        ) v

要么

SELECT  v.*
FROM    document d
LEFT JOIN
        (
        SELECT  *, ROW_NUMBER() OVER (PARTITION BY v.id ORDER BY revision DESC)
        FROM    version
        ) v
ON      v.document = d.id
        AND v.rn = 1

如果您的文檔通常只有很少的修訂版並且您需要選擇所有或幾乎所有文檔,則后者更有效; 如果文檔有很多修訂版或者您只需要選擇一小部分文檔,前者會更有效。

更新:

對不起,沒有注意到關於MySQL的問題。

MySQL ,你這樣做:

SELECT  *
FROM    document d
LEFT JOIN
        version v
ON      v.id = 
        (
        SELECT  id
        FROM    version vi
        WHERE   vi.document = d.document
        ORDER BY
                vi.document DESC, vi.revision DESC, vi.id DESC
        LIMIT 1
        )

version (document, revision, id)上創建復合索引version (document, revision, id)以便快速工作。

如果我理解正確,top也無法解決您的問題。 top完全等同於limit。 你正在尋找的是聚合函數,如max()或min(),如果你想要極端的話。 例如:

select link_id, max(column_a), min(column_b) from table_a a, table_b b 
where a.link_id = b.link_id group by link_id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM