简单的 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)的主要内容,如果未能解决你的问题,请参考以下文章