我有两个名为“membership”和“限制”的表。
表:会员资格
+---------+--------+
| GroupID | UserID |
+---------+--------+
| 10001 | 605 |
| 10001 | 255 |
| 10002 | 605 |
| 10004 | 222 |
| 10003 | 605 |
| 10002 | 501 |
+---------+--------+
表:限制 名为限制的表格具有受限制的GroupID以及该组受限制的相应ContentID。
+---------+-----------+
| GroupID | ContentId |
+---------+-----------+
| 10001 | 33333 |
| 10001 | 22222 |
| 10002 | 22222 |
| 10004 | 44444 |
| 10003 | 22222 |
| 10002 | 44444 |
+---------+-----------+
我想从受限制的表中获取用户ID所属的所有组的ContentID。
即。 与UserID = 605的示例数据一样,组ID为“10001,10002,10003”,我需要获取为用户605列出的所有组ID限制的ContentID。
在这种情况下,预期的ContentID是'22222'。
最终目标是获取ContentID的列表,该列表在该UserID的所有组中受到限制。如果ContentID不受组中的任何一个限制,则contentID不再被视为受限制。
答案 0 :(得分:1)
以下内容列出了任何组限制的所有内容:
SELECT m.UserID, r.GroupId, r.ContentID
FROM Membership m JOIN
Restricted r
ON m.GroupID = r.GroupID
WHERE m.UserID = 605;
要在所有组中限制内容,您可以计算群组数量,并确保每个群组都有代表:
WITH ugr AS (
SELECT m.UserID, r.GroupId, r.ContentID
FROM Membership m JOIN
Restricted r
ON m.GroupID = r.GroupID
WHERE m.UserID = 605
)
SELECT UserId, ContentId
FROM ugr
GROUP BY UserId, ContentId
HAVING COUNT(DISTINCT GroupId) = (SELECT COUNT(DISTINCT GroupId) FROM ugr);
答案 1 :(得分:0)
select contentid from Restriction rec join
(
select COUNT(*) OVER () as totalGroups, groupid from Membership
where userid=605) as userMembership
on userMembership.groupid=rec.GroupId
group by ContentId,totalGroups
having count(*)=totalGroups