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