mysql - sql嵌套顺序
问题描述
这是对这篇文章的澄清:
在接受的答案中,嵌套查询是用于最大计算的查询,而外部查询则与之相连。我试图颠倒顺序,但遇到了语法错误。
询问:
(SELECT id, MAX(rev) mrev
FROM docs
GROUP BY id) b
join (select id, rev, content from docs) d
on b.id = d.id and d.rev = b.rev
我遇到的错误是这样的:
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法,以便在 'b join (select id, rev, content from docs) d on b.id = d.id and d.rev = b.rev' 附近使用3
这里的顺序重要吗?
解决方案
您可以像这样编写该查询。
SELECT d.*
FROM
(
SELECT id, MAX(rev) AS maxrev
FROM docs
GROUP BY id
) b
JOIN docs AS d
ON (b.id = d.id AND d.rev = b.maxrev)
请注意它是如何从子查询中选择最大转速的。而子查询只是简单地加入到表中。
另一种写法:
select d.*
from docs d
join (
select id, max(rev) maxrev
from docs
group by id
) b
on b.id = d.id and b.maxrev = d.rev
或者,如果您敢于使用 EXISTS :
SELECT *
FROM docs AS d
WHERE EXISTS (
SELECT 1
FROM docs AS b
WHERE b.id = d.id
GROUP BY b.id
HAVING d.rev = MAX(b.rev)
);
推荐阅读
- html - 打印 html 时,让 div 完全覆盖最后一页
- c# - 仅选择具有多个包含的 mvc linq 查询中的某些字段
- powershell - 如果用户还不是 A 组的成员并且也不是 B 组的成员,则 Powershell 将用户添加到 A 组
- javascript - React - 加载页面一次调用所有 onClicks,然后单击按钮什么也不做
- android - (基于 android-9.0.0_r10 的平台框架)中的高/严重安全风险 - CVE-2019-9468
- c++ - 如何告诉 Visual Studio 使用特定版本的 MFC 库?
- reactjs - 反应滚动从底部开始
- excel - 如果文件已存在,则另存为新版本
- python - 试图在 DataFrame 中的切片副本上设置一个值。在初始化期间使用 pandas
- scala - 如果错误则抛出异常并在成功时不返回任何内容的函数式方法