这个查询可以避免子查询吗?

Can sub-query be avoided in this query?

我的数据库中的三个 table 如下:

现在假设一位老师不能参加 class,所以 he/she 发布了 substitute_request,所以我们只想向那些有相同学生的老师发送通知常见的。所以我写了 SQL 相同的查询:

SELECT DISTINCT students_volunteers.v_id_sv 
FROM   students_volunteers 
WHERE  students_volunteers.s_id_sv IN (SELECT students_volunteers.s_id_sv 
                                       FROM   students_volunteers 
                                       WHERE  v_id_sv = 3) 
       AND students_volunteers.v_id_sv <> 3 

它工作正常,除了它有一个子查询,由于性能问题,它并不理想。
所以我想知道我们是否可以使用一些 JOIN 或其他东西来提高性能......

你可以试试 not exists:

SELECT DISTINCT teacher_id
FROM students_volunteers sv
WHERE 
    teacher_id <> 3
    AND EXISTS (
        SELECT 1
        FROM students_volunteers sv1
        WHERE sv1.teacher_id = 3 AND sv1.student_id = sv.student_id
    )

或者,这里有一个自join的方法:

SELECT DISTINCT sv.teacher_id
FROM students_volunteers sv
INNER JOIN students_volunteers sv1
    ON sv1.teacher_id <> sv.teacher_id
    AND sv1.student_id = sv.student_id
WHERE sv1.teacher_id = 3