簡體   English   中英

如何避免子查詢?

[英]How can I avoid a sub-query?

這是我的表:

ID   KEY    VALUE
1    alpha  100
2    alpha  500
3    alpha  22
4    beta   60
5    beta   10

我正在嘗試檢索所有KEY -s的列表及其最新值( ID最大值):

ID   KEY     VALUE
3    alpha   22
5    beta    10

在MySQL中我使用此查詢,這是無效的:

SELECT temp.* FROM
  (SELECT * FROM t ORDER BY id DESC) AS temp
GROUP BY key

在這種情況下是否可以避免子查詢?

使用INNER JOIN加入您的最大ID。

SELECT  t.*
FROM    t
        INNER JOIN (
          SELECT  ID = MAX(ID)
          FROM    t
          GROUP BY
                  key
        ) tm ON tm.ID = t.ID                  

假設ID列已編入索引,這可能與其獲得的速度一樣快。

這是討論該主題的mysql文檔頁面

它提出了三種不同的選擇。

唯一不涉及子查詢的是:

SELECT t1.id, t1.k, t1.value
FROM t t1
LEFT JOIN t t2 ON t1.k = t2.k AND t1.id < t2.id
WHERE t2.k IS NULL;

手冊中頁面說明了如何執行此操作

暫無
暫無

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

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