我真的不知道如何表达,但我认为一个例子会让这变得非常容易。假设有一个学生和类(class)的数据库。
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
我想做的是仅当我搜索类(class) 1 和 3 时才获取返回学生 Bill 的查询,现在如果我搜索 1、1 和 3 以及 1,我可以让它返回 Bill, 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
如果学生属于类(class) 1 或类(class) 3,而我希望结果仅返回类(class) 1 和类(class) 3 的学生,那么它们都会返回结果。有什么想法吗?
最佳答案
在其中放置一个 HAVING
子句,以及适当的 GROUP BY
和诸如此类的内容:
HAVING COUNT(student_class.class_id) = 2
这将对查询结果进行后过滤,仅允许类 ID 计数为 2 的记录,这意味着它们同时位于 1
和 3
类(class)。如果它们只属于两者之一,或者都不存在,那么它们的计数将为 0 或 1。
关于mysql - 如何使用联接来获取在联接表上搜索多行的单个结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20202203/