在MYSQL中查找And作为记录

问题描述 投票:0回答:1

我想找到学生id,必须有(professorId = 3 And courseId = 4) And (professorId = 3 And courseId = 2) And (professorId = 5 And courseId = 8)。 有时这些括号是 1 个或超过 20 个

我有两个表班和学生班是这样的:

学生班级表:

id | studentId | classId
1        1         2
2        1         3
3        1         4
4        2         3
5        2         5
6        3         2
7        4         3
8        4         2
9        1         8

班级表:

id | professorId | CourseId

1        1            1
2        3            4
3        2            5
4        3            2
5        4            2
6        2            3
7        5            6
8        5            8
9        5            9

如果每个括号都充当或,那就非常简单了。但我想找到一个以和的形式拥有所有这些东西的学生。

这个查询是“OR”场景:

select `studentsClasses`.`studentId` from `studentsClasses`
 inner join `class` on (`studentsClasses`.`classId`=`class`.`id` 
AND ((professorId = 3 And courseId = 4) OR (professorId = 3 And courseId = 2) 
   OR (professorId = 5 And courseId = 8)))

但我想要这样的场景:

select `studentsClasses`.`studentId` from `studentsClasses`
     inner join `class` on (`studentsClasses`.`classId`=`class`.`id` 
    AND ((professorId = 3 And courseId = 4) AND (professorId = 3 And courseId = 2) 
       AND (professorId = 5 And courseId = 8)))

但是上面的查询是错误的。

例如,具有这些值的结果查询应该是:

studentId
---------
1
sql mysql
1个回答
0
投票

我想到的一种方法是对每个条件使用单独的连接。这不是一个有效的解决方案,但如果数据不是太大的话可能没问题。

SELECT DISTINCT s.studentId FROM studentsClasses s
JOIN `class` c1 ON s.classId = c1.id AND c1.professorId = 3 AND c1.courseId = 4
JOIN `class` c2 ON s.classId = c2.id AND c2.professorId = 3 AND c2.courseId = 2
JOIN `class` c3 ON s.classId = c3.id AND c3.professorId = 5 AND c3.courseId = 8
© www.soinside.com 2019 - 2024. All rights reserved.