两次或多次加入大桌子的最佳方法是什么? 例如,在这个虚构的例子中,我们有学生表,学生记录有TUTOR_ID列是对同一个表的引用给另一个学生。
我想要完成的是一份报告,找到所有同一学生的导师。
所以我建立了一个这样的查询:
第一次找到父母子女关系
第二次找到共享同一学生的所有导师
我尝试使用“with子句”但查询性能确实很差 有更好的方法吗?
WITH STUDENT_TMP_TABLE AS (
select
TUTORS.STUDENT_IDENTIFIER as TUTOR_STUDENT_IDENTIFIER,
CADETS.STUDENT_IDENTIFIER as CADET_STUDENT_IDENTIFIER
FROM V_STUDENTS_RELATIONS TUTORS
INNER JOIN V_STUDENT_RELATIONS CADETS ON CADETS.TUTOR_ID = TUTORS.STUDENT_IDENTIFIER AND TUTORS.TUTOR_ID IS NULL
WHERE -- ? conditions truncated
)
SELECT
*
FROM STUDENT_TMP_TABLE STUD_TMP1
JOIN STUDENT_TMP_TABLE STUD_TMP2
ON STUD_TMP1.TUTOR_STUDENT_IDENTIFIER <> STUD_TMP2.TUTOR_STUDENT_IDENTIFIER
AND STUD_TMP1.CADET_STUDENT_IDENTIFIER = STUD_TMP2.CADET_STUDENT_IDENTIFIER;