我真的不知道怎么说这个,但我想一个例子会让这很容易。让我们说有一个学生和班级的数据库。
Students:
id | name
1 | Bill
2 | Tom
Classes
id | name
1 | history
2 | math
3 | science
student_class
student_id | class_id
1 | 1
1 | 3
我正在尝试做的是获取查询只返回学生Bill如果我搜索1和3类,现在我可以让它返回Bill如果我搜索1,1和3,和1, 2和3使用正常的左连接。我正在尝试从学生表中搜索并查找仅包含列出的所有搜索字词的结果。类似的东西:
SELECT * FROM students
LEFT JOIN studen_classes on students.id = student_classes.student_id
WHERE student_classes.class_id IN (1,3)
我也试过
WHERE student_classes.class_id = 1 AND student_classes.class_id = 3
如果我希望结果只返回有1级和3级的学生,那么如果学生被安排到1级或3级,他们都会返回结果。任何想法?
答案 0 :(得分:1)
在那里添加一个HAVING
子句,其中包含适当的GROUP BY
和whatnot:
HAVING COUNT(student_class.class_id) = 2
这将对查询结果进行后置过滤,以仅允许类ID为2的记录,这意味着它们同时属于1
和3
类。如果他们只是两个中的一个,或者没有,那么他们的计数将是0或1。