简单的 SQL 问题(MySQL)

Posted

技术标签:

【中文标题】简单的 SQL 问题(MySQL)【英文标题】:Simple SQL problem (MySQL) 【发布时间】:2009-02-03 10:17:25 【问题描述】:

我有这个问题:

SELECT page.id, revision.title, revision.number
FROM page
    INNER JOIN revision ON page.id = revision.pageId

这将返回如下内容:

"1"   "Page Version A"   "1"
"1"   "Page Version B"   "2"
"1"   "Page Version C"   "3"

现在我只想为每一页返回一行,其中包含最新(最高编号)修订版的数据。如果我这样做:

SELECT page.id, revision.title, revision.number
FROM page
    INNER JOIN revision ON page.id = revision.pageId
GROUP BY page.id

我明白了:

"1"   "Page Version A"   "1"

但我想要:

"1"   "Page Version C"   "3"

有什么想法吗? 谢谢。

【问题讨论】:

【参考方案1】:

添加类似于

的WHERE子句

WHERE revision.number = (select max(number) from revision r where r.pageId = page.id)

【讨论】:

【参考方案2】:

如果您只想选择一条记录,您可以使用 mysql 'LIMIT' 关键字(类似于 MSSQL 'TOP')

例如:

SELECT page.id, revision.title, revision.number
FROM page
    INNER JOIN revision ON page.id = revision.pageId

ORDER BY revision.number DESC
LIMIT 0, 1

这将对所有结果进行排序,然后选择顶部的结果。

【讨论】:

这个解决方案比 Rahul 的解决方案更快!【参考方案3】:

如果这是您将多次运行的查询,我会考虑创建一个视图,以选择每个 pageid 的最新修订:

create view LatestRevision
as 
Select pageid, max(number) from revision

那么查询将是

SELECT page.id, revision.title, revision.number
FROM page
    INNER JOIN revision ON page.id = revision.pageId
    INNER JOIN LatestRevision on revision.pageid = LatestRevision.pageid and revision.Number = LatestRevision.number

【讨论】:

【参考方案4】:
SELECT page.id, MAX(revision.number)
FROM page
INNER JOIN revision ON page.id = revision.pageId
GROUP BY page.id

【讨论】:

这只会选择最大的版本号,而不是整个最新的版本。

以上是关于简单的 SQL 问题(MySQL)的主要内容,如果未能解决你的问题,请参考以下文章

将 MySQL 简单查询转换为 SQL Server

MySQL如何防止SQL注入

查看Mysql实时执行的Sql语句

MySQL5.7.16安装教程,以及简单的sql命令介绍_项海涛

简单的 SQL 问题

将 MS SQL SERVER 数据库导出到 MySql 数据库的最简单方法