mysql - sql嵌套顺序

标签 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

我遇到的错误是这样的:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'b join (select id, rev, content from docs) d on b.id = d.id and d.rev = b.rev' at line 3

这里的顺序重要吗?

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

最佳答案

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

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

关于mysql - sql嵌套顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51572295/

相关文章:

php - 将表单值插入数据库

c# - 如何在 C# 中修复 SQLite 查询?

mysql - 从以前的最新记录中选择一列

mysql - 嵌套查询以获取两个条件的计数

php - 如何使用 PHP + MySQL Ajax 获取 jQuery 自动完成功能并传递给 JavaScript

php - 同时插入两个共享相同id的表

mysql - 为什么带有 varchar 变量的 mysql 查询执行速度极慢?

mysql - 不能用 PDO 设置 NULL

sql - DATEDIFF 基于 WHERE 子句中的 ID

MYSQL 插入外键