假设我在用户和项目之间存在多对多关系:一个用户可能属于多个项目,一个项目可能有多个用户。这种关系编码在表中user_projects
:
create table user_projects
(
proj_id int references projs(id) not null,
user_id int references users(id) not null,
primary key (proj_id, user_id)
);
这是我的问题:给定一组用户(user1,user2,...),我想选择给定用户集是其所有用户子集的所有项目。
例如,如果我在下面插入数据,然后询问用户 1 和 2 的所有项目,那么查询应该只返回项目 1。
insert into user_projects values (1, 1);
insert into user_projects values (1, 2);
insert into user_projects values (1, 3);
insert into user_projects values (2, 1);
insert into user_projects values (2, 3);
(如果最好的解决方案碰巧是非标准的,我正在使用 PostgreSQL。)
编辑:为澄清起见,用户集应被解释为对要返回的项目列表的约束。集合 {u1, u2} 意味着项目列表应该只包括那些至少有用户 u1 和 u2 的项目;集合 {u1} 表示应返回至少具有用户 u1 的所有项目,并且作为限制情况,空集表示应返回所有项目。