嵌套的sql顺序

时间:2018-07-28 14:30:44

标签: mysql sql

这是此帖子的一个说明:

SQL select only rows with max value on a column

在接受的答案中,嵌套查询是用于最大计算的查询,而外部查询则加入该查询。我试图颠倒顺序,但遇到语法错误。

查询:

(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加入(从文档中选择id,rev,文档中的内容)d在b.id = d.id上,   d.rev = b.rev',位于第3行

这里的订单重要吗?

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

1 个答案:

答案 0 :(得分:1)

您可以这样编写该查询。

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