我有一个表TEST,其中包含以下列:
code_ver (VARCHAR)
suite (VARCHAR)
date (DATE)
字符串
现在,我想选择10行,其值为c ode_ver & code_ver NOT LIKE '%DevBld%' sorted by date desc.
所以我写了下面的查询:
select *
from test
where code_ver IN (select DISTINCT code_ver
from test
where code_ver NOT LIKE '%DevBld%'
ORDER by date DESC LIMIT 10);
型
理想情况下,这个查询应该可以工作,但我的MySQL版本说:
此版本的MySQL尚不支持“LIMIT & IN/ALL/ANY/SOME subquery”
有人能给我一个替代这个问题的建议吗?
7条答案
按热度按时间jljoyd4f1#
Layke建议的答案在我的权限范围内是错误的。在子查询中使用limit的意图是使主查询在从子查询获取的有限记录上运行。如果我们将limit保持在外部,那么它使limit对子查询无用。
由于mysql还不支持在子查询中限制,所以你可以使用JOIN,如下所示:
字符串
2admgd592#
你也可以使用同样的查询,只需要在子查询前多加一层select。就是这样,它就可以工作了。
字符串
gpnt7bae3#
将子查询放入派生表中:
字符串
(You当然,也可以RIGHT JOIN,并删除外部WHERE条件。)
gupuwyp24#
也许有点晚,但您可以将子查询 Package 到另一个查询中,然后从子查询中获取所有内容
字符串
hfyxw5xn5#
SELECT * FROM test WHERE code_ver IN(SELECT code_ver,RANK()OVER(ORDER BY date DESC)AS rank_of_date FROM test WHERE code_ver NOT LIKE '%DevBld%')WHERE rank_of_date <= 10);
gdx19jrr6#
字符串
oxf4rvwz7#
你得到的错误并不完全是因为MySQL的版本。我认为所有版本都支持这一点。你必须改变LIMIT 10的位置,并将其放置在“)"之后。让我知道它是否适合你。我在我的上面运行了下面的一个,它可以工作。
例如
字符串
更新:尝试下面的一个,这样的顺序将工作:
型