提取所有文章出现时出现的项目
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
。如上所述,我们有 ArticleId
s: 1,2,3,4。姓名 a
和 h
通过了标准,因为只有他们出现在所有文章中。另一方面,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);
我有以下 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
。如上所述,我们有 ArticleId
s: 1,2,3,4。姓名 a
和 h
通过了标准,因为只有他们出现在所有文章中。另一方面,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);