Pi *_*rse 18 mysql sql database
我有一个表TEST与以下列:
code_ver (VARCHAR)
suite (VARCHAR)
date (DATE)
Run Code Online (Sandbox Code Playgroud)
现在我想选择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);
Run Code Online (Sandbox Code Playgroud)
理想情况下,此查询应该可以正常工作,但我的MySQL版本说:
此版本的MySQL尚不支持'LIMIT&IN/ALL/ANY/SOME子查询'
有人可以建议我替代这个查询吗?
小智 32
Layke建议的答案在我的职权范围内是错误的.在子查询中使用限制的意图是在从子查询获取的有限记录上运行主查询.如果我们在外面保持限制,那么它对子查询的限制毫无用处.
由于mysql在子查询中不支持限制,因此您可以使用JOIN,如下所示:
SELECT * FROM test
JOIN
(
SELECT DISTINCT code_ver
FROM test
WHERE code_ver NOT LIKE '%DevBld%'
ORDER BY date DESC LIMIT 10
) d
ON test.code_ver
IN (d.code_ver)
ORDER BY xyz;
Run Code Online (Sandbox Code Playgroud)
yas*_*ash 15
您也可以使用相同的查询,只需在子查询之前添加一层额外的选择即可。就是这样。它会起作用。
select * from test
where code_ver IN (select * from (select DISTINCT code_ver
from test
where code_ver NOT LIKE '%DevBld%'
ORDER by date DESC LIMIT 10) as t1);
Run Code Online (Sandbox Code Playgroud)
将子查询放在派生表中:
SELECT test.*
FROM test
LEFT JOIN (SELECT DISTINCT code_ver
FROM mastertest
WHERE code_ver NOT LIKE '%DevBld%'
ORDER BY `date` DESC
LIMIT 10) d
USING (code_ver)
WHERE d.code_ver IS NOT NULL;
Run Code Online (Sandbox Code Playgroud)
(当然,您也可以右键加入,然后删除外部WHERE条件.)
Sar*_*ara -14
您收到的错误并不完全是由于 MySQL 的版本所致。我认为所有版本都支持这一点。您必须更改 LIMIT 10 位置并将其放在“)”之后。请让我知道这对你有没有用。我在我的机器上运行了下面的一个,它起作用了。
例如
SELECT * FROM test where name IN (
SELECT DISTINCT name
FROM projects
WHERE name NOT LIKE "%DevBld%"
ORDER by date_created DESC
) LIMIT 10;
Run Code Online (Sandbox Code Playgroud)
更新:尝试下面的方法,这样订单就可以工作:
SELECT * FROM automation.e2e_projects WHERE name IN (
SELECT DISTINCT name
FROM automation.e2e_projects
WHERE name NOT LIKE "%DevBld%"
) ORDER by date_created DESC LIMIT 10;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
41100 次 |
| 最近记录: |