我有2个db表 - Article和Article_Version。
文章表:
=====ID====|======Date_Added=====|==================Link===================
1 01/01/2018 www.guardian.co.uk/sports/abc.html
2 07/01/2018 www.guardian.co.uk/sports/def.html
3 02/01/2018 www.guardian.co.uk/sports/abc.html
ArticleVersion:
=====Id=====|=====DateAdded=====|=====ArticleId=====|=====Version=====
1 01/01/2018 1 1
2 07/01/2018 2 1
3 02/01/2018 3 2
现在我正在尝试构建一个查询,在这里我可以获得包含多个版本的任何文章的所有文章转换的列表。我的C#代码散列值以了解版本号是否增加。
我需要帮助编写查询以返回包含多个版本的任何文章的所有文章撤销列表。
我有这个,但它没有返回正确的结果
SELECT ArticleVersion.*,Article.link
FROM ArticleVersion
JOIN Article ON Article.Id=ArticleVersion.ArticleId
WHERE VERSION > 1;
如果我出错了,请有人帮忙吗?
答案 0 :(得分:0)
你想要所有版本。想到一个窗口函数:
SELECT av.*, a.link
FROM Article a JOIN
(SELECT av.*, COUNT(*) OVER (PARTITION BY av.ArticleId) as cnt
FROM ArticleVersion av
) av
ON a.Id = av.ArticleId
WHERE cnt > 1;
由于过滤,您的查询版本错过了第一个版本。
答案 1 :(得分:0)
你可以试试这个。
SELECT AV.*, A.link
FROM ArticleVersion AV
JOIN Article A ON A.Id=AV.ArticleId
WHERE
EXISTS( SELECT * FROM ArticleVersion AV2
WHERE AV2.ArticleId = AV.ArticleId
AND AV2.Id <> AV.Id )