我有SQL表Program(父),Project(子),Member(子子)。成员是项目用户(表)的表示。
计划是多个项目的组合,并且项目将具有成员列表。一个用户可以是多个项目的成员,每个项目都有一个Member副本。
仅当用户是该程序中所有项目的一部分时,我才希望显示该程序的列表。为此,我想编写一个SQL查询来选择程序列表
这是我拥有的表结构。
程序{ 身份证,姓名 }
项目{ 身份证,姓名 }
program_project { id,program_id,project_id }
成员{ id,名称,project_id,user_id }
用户{ 身份证,姓名 }
我正在尝试使用内部联接,但是这种方法无法解决,希望能提供任何帮助。
谢谢
答案 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
)