首页 > 解决方案 > sql嵌套顺序

问题描述

这是对这篇文章的澄清:

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

这里的顺序重要吗?

这是链接: http ://sqlfiddle.com/#!9/a6c585/64570

标签: mysqlsql

解决方案


您可以像这样编写该查询。

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)
);

推荐阅读