提取所有文章出现时出现的项目

Extract items which appears for all articles occurence

我有以下 table 如下:

结构:

ArticleId INT, 
Name varchar(100), 
NameId INT

示例数据:

ArticleId    Name    NameId      
----------------------------
1            a       100
2            a       100
3            a       100
2            b       200
4            a       100
1            c       300
4            g       400
1            h       500
2            h       500
3            h       500
4            h       500

我只想得到出现在所有文章 (ArticleId) 中的那些 Name 和他们的 NameId。如上所述,我们有 ArticleIds: 1,2,3,4。姓名 ah 通过了标准,因为只有他们出现在所有文章中。另一方面,b,c and g 仅出现在给定的文章中(并非全部)。

最后的结果应该是:

a       100
h       500

我怎样才能做到这一点?

我们可以尝试使用聚合:

SELECT Name, NameId
FROM yourTable
GROUP BY Name, NameId
HAVING COUNT(*) = (SELECT COUNT(DISTINCT ArticleId) FROM yourTable);

实际上,只有当您确定每篇文章 ID 至少会在 table 中出现一次时,以上方法才有效。断言 table 专用于保存文章的文章数量会好得多,所以:

SELECT Name, NameId
FROM yourTable
GROUP BY Name, NameId
HAVING COUNT(*) = (SELECT COUNT(*) FROM articles);