查询 - 从3个表中加入

时间:2016-02-11 04:28:57

标签: java mysql jpa named-query

我需要从3桌教授,老师和学生那里做一个连接查询。每位教授都有一份教师名单,每位教师都有一份学生名单。我正在开发一个网络服务,它只给我教授身份和基础,我需要让这位特殊教授的所有学生。所以我需要先得到老师名单,然后从中我可以得到所有学生。 有人可以帮忙吗?我不想使用级联选择。我想使用JOIN FETCH,因为我正在使用jpa。

表教授:教授身份,教授姓名,教授地址

表格老师:教师ID,教授ID,教师姓名

表学生:学生ID,教师ID,学生姓名,学生地址

2 个答案:

答案 0 :(得分:2)

以下是您的要求的JPA查询。 请注意,StudentModel应映射到student表。 StudentModel应该有一个属性'老师'这是' TeacherModel'类型。 老师模特应该有“教授”这样的教授。其类型为' ProferssorModel'然后才有效。

DATE

或使用sql命名查询,我们也可以这样做。

<query name="findStudentsByProfessorID">
    <query-param name="professorId" type="Long" />
        SELECT student 
        FROM StudentModel student
        inner join fetch student.teacher teacher
        inner join fetch teacher.professor professor
        WHERE professor.id = :professorId

</query>

答案 1 :(得分:1)

由于您没有提到表结构,最简单的查询是执行以下操作,假设您将studentid作为student表中的外键,并将professorid作为教师表中的外键:

Select * from student s 
  where s.teacherid in 
     (select t.teacherid from teacher t where t.professorid = 1);

使用子查询/级联选择的替代方法是使用连接。

select * from student s join teacher t 
    on s.teacherid = t.teacherid where t.professorid = 1;