我有一个类似这样的查询(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的行。
有没有办法在没有子查询的情况下复制这个查询?
答案 0 :(得分: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
答案 1 :(得分:0)
我不知道这是否对您有所帮助,但由于您担心因频繁插入而导致更改数据库,您可以尝试下面的解决方案,通过事先选择max来消除获得最大值的动力,并将其用作比较。它将获得您选择触发查询的点所具有的最大行。
with m as (select max(d) as d from xTable ) select a, b, c, d from xTable where d = (select d from m) ;
所以在这里,你的当前查询的最大值是固定的。