求助:查询存在多版本的文章的所有Article_Version记录
解决多版本文章的SQL查询问题
我来帮你搞定这个SQL查询的问题!咱们核心需求很明确:找出所有拥有多个版本的文章,然后把这些文章对应的所有Article_Version记录都查出来。
先明确假设的表结构(你可以根据实际情况调整字段名)
Article表:至少包含主键ArticleId(唯一标识每篇文章),可能还有Title、CreateTime等其他文章基础字段Article_Version表:包含ArticleId(关联Article表的外键)、VersionNumber(版本号)、Hash(你用来判断版本递增的哈希值)等版本相关字段
正确的SQL查询语句
这里给你两种常用的写法,选你觉得顺手的就行:
写法1:子查询过滤
SELECT av.* FROM Article_Version av WHERE av.ArticleId IN ( -- 先筛选出有多个版本的文章ID SELECT ArticleId FROM Article_Version GROUP BY ArticleId HAVING COUNT(*) > 1 );
写法2:CTE(公共表表达式,可读性更强)
WITH MultiVersionArticles AS ( -- 先定义一个临时结果集:所有有多个版本的文章ID SELECT ArticleId FROM Article_Version GROUP BY ArticleId HAVING COUNT(*) > 1 ) -- 关联获取这些文章的所有版本记录 SELECT av.* FROM Article_Version av JOIN MultiVersionArticles mva ON av.ArticleId = mva.ArticleId;
如果需要关联Article表获取文章基础信息
如果还想同时拿到文章的标题等信息,可以稍微调整查询:
SELECT a.ArticleId, a.Title, av.* FROM Article a JOIN Article_Version av ON a.ArticleId = av.ArticleId WHERE a.ArticleId IN ( SELECT ArticleId FROM Article_Version GROUP BY ArticleId HAVING COUNT(*) > 1 );
关于你之前查询不符合预期的可能原因
大概率是这几个问题:
- 没有正确筛选出版本数量>1的文章,比如分组字段错了(比如按VersionNumber分组而不是ArticleId)
- 错误地只查询了相邻版本(比如用了
LAG()或LEAD()但没过滤多版本文章) - 关联
Article表时逻辑出错,比如用了左连接导致包含了无版本的文章
内容的提问来源于stack exchange,提问作者Jane_ami
相关产品推荐
相关产品推荐

