ユーザーとプロジェクトの間に多対多の関係があるとします。1人のユーザーが複数のプロジェクトに属し、1つのプロジェクトに複数のユーザーがいる場合があります。この関係はテーブルにエンコードされています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を持つすべてのプロジェクトが返されることを意味し、限定的なケースとして、空のセットはすべてのプロジェクトが返されることを意味します。