假设我们有一个表,其中包含列c1,c2,c3,...
对于列c2,我对特定值k1,k2,...,kn感兴趣。
考虑行的子集,其中每行具有相同的c1值,并且如果我们在子集中获取c2的值列表,则该列表必须包含所有值k1,k2,...,kn。
我真正想要的是每个此类子集的c1值列表。
[编辑:响应下面的第一条评论:]为了提供一个基本示例,假设我有一个表,其中userid作为列1,而SkillsList作为列2。此表中大约有15种技能。我希望获得具有三种特定技能的所有用户的用户ID,例如[sql,php,js]
我该如何在SQL中拉这个?
您已经描述了关系划分。https://zh.wikipedia.org/wiki/Relational_algebra
让R(c1 PRIMARY KEY, c2, c3)
-表
S(col)={ k1, k2, ..., kn}
-包含一个设定值,除法器。两种通用方法是NOT EXISTS-用余数除法和COUNT()-精确除法。
SELECT DISTINCT c1
FROM R r1
WHERE NOT EXISTS
(SELECT *
FROM S
WHERE NOT EXISTS
(SELECT *
FROM R AS r2
WHERE (r1.c1 = r2.c1)
AND (r2.c2 = S.col)));
和
SELECT r1.c1
FROM R AS r1,
JOIN S AS s1 ON r1.c2 = s1.col
GROUP BY r1.c1
HAVING COUNT(r1.c2) = (SELECT COUNT(s2.col) FROM S s2);
有关更多方法,请参见https://www.simple-talk.com/sql/t-sql-programming/divided-we-stand-the-sql-of-relational-division/。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句