SQL:仅当其所有子级都有特定的子级子级时,“父级,子级,子项”才选择父级

时间:2019-03-20 03:29:54

标签: sql postgresql inner-join parent-child

我有SQL表Program(父),Project(子),Member(子子)。成员是项目用户(表)的表示。

计划是多个项目的组合,并且项目将具有成员列表。一个用户可以是多个项目的成员,每个项目都有一个Member副本。

仅当用户是该程序中所有项目的一部分时,我才希望显示该程序的列表。为此,我想编写一个SQL查询来选择程序列表

这是我拥有的表结构。

程序{ 身份证,姓名 }

项目{ 身份证,姓名 }

program_project { id,program_id,project_id }

成员{ id,名称,project_id,user_id }

用户{ 身份证,姓名 }

我正在尝试使用内部联接,但是这种方法无法解决,希望能提供任何帮助。

谢谢

1 个答案:

答案 0 :(得分:0)

无法使用显示的架构来完成,因为您将project_id作为成员上的一列-即。每个成员都有一个(只有一个)项目,因此根据定义,它不能属于“所有项目”。

因此,如果您希望一个成员属于多个项目,则需要进行重组:

成员{id,name}

member_project {id,member_id,project_id}

然后,对于给定的程序,您可以使用以下命令进行检查:

select * from member m
where not exists (
    select * from program_project pp, member_project mp
    where pp.program_id = :program-id
    and pp.project_id <> mp.project_id
    and mp.member_id = m.id
)