查询 - 从 3 个表加入

Query - Join from 3 tables

我需要从 3 table 教授、教师和学生中进行连接查询。每个教授都有一个教师列表,每个教师都有一个学生列表。我正在开发一个 Web 服务,它将只给我教授 ID,并基于此我需要为这位特定教授获取所有学生。所以我需要先得到教师名单,然后我才能得到所有学生。 任何人都可以帮忙吗?我不想使用级联 select。我想使用 JOIN FETCH 因为我正在使用 jpa。

Table教授:教授id,教授姓名,教授地址

Table教师:教师id,教授id,教师姓名

Table student : 学号, 教师号, 学号, 学号

由于您没有提到 table 结构,最简单的查询是执行以下操作,假设您在学生 table 中将 teacherid 作为外键,在教师 [=17] 中将 professorid 作为外键=]:

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

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

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

这是满足您要求的 JPA 查询。 请注意,StudentModel 应映射到学生 table。 StudentModel 应该有一个 属性 'teacher' 是 'TeacherModel' 类型。 TeacherModel 应该有类型为 'ProferssorModel' 的 'professor' 属性 然后只有这个有效。

<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>

或者使用sql命名查询我们也可以做到。

<sql-query name="findStudentsByProfessorID">
    <query-param name="professorid" type="long" />
    <![CDATA[
        select * from student s join teacher t 
        on s.teacherid = t.teacherid where t.professorid = :professorid;
    ]]>
</sql-query>