查询 - 从 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>
我需要从 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>