簡體   English   中英

如何使用不帶子查詢的列的MAX過濾SQL查詢?

[英]How can I filter a SQL query using the MAX of a column without subqueries?

我有一個類似這樣的查詢(MySQL):

查詢:

SELECT a, b, c, d FROM xTable WHERE d=(
    SELECT MAX(d) FROM xTable WHERE uid=1
) AND c=0

樣品:

--xTable--
|  a  |  b  |  c  |  d  | uid |
| 30  | str | 20  | 32  | 1   |
| 36  | abc | 0   | 32  | 1   |
| 20  | ... | 40  | 33  | 1   |
| 19  | dsi | 0   | 34  | 1   |
| 68  |aeasd| 0   | 34  | 1   |
| 112 |3eids| 224 | 34  | 1   |

我只想要具有最大d(34)和uid = X的行,但只希望那些具有c = 0的行。

有沒有辦法在沒有子查詢的情況下復制此查詢?

可以將其重寫為JOIN,但我不知道為什么這樣做會改善任何情況(盡管使用MySQL有限的查詢優化器,您永遠不會知道...)

SELECT t1.a, 
       t1.b, 
       t1.c, 
       t1.d 
FROM xTable t1
  JOIN (
     SELECT MAX(d) as max_d
     FROM xTable 
     WHERE uid=1
  ) t2 ON t2.max_d = t1.d
WHERE t1.c=0

我不知道這是否對您有幫助,但是由於您擔心的是由於頻繁插入而更改數據庫,因此您可以嘗試以下解決方案,該解決方案可以通過預先選擇max並將其用作比較來消除獲得max的動力。 它將在您選擇觸發查詢時獲得具有最大值的行。

with m as (select max(d) as d from xTable ) select a, b, c, d from xTable where d = (select d from m) ;

因此,在這里,您已經確定了當前查詢的最大值。

暫無
暫無

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

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