mysql - 如何使用联接来获取在联接表上搜索多行的单个结果?

标签 mysql

我真的不知道如何表达,但我认为一个例子会让这变得非常容易。假设有一个学生和类(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 的记录,这意味着它们同时位于 13 类(class)。如果它们只属于两者之一,或者都不存在,那么它们的计数将为 0 或 1。

关于mysql - 如何使用联接来获取在联接表上搜索多行的单个结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20202203/

相关文章:

python - 将 MySQL 转换为 Flask-SQLAlchemy

mysql - Django - 如何从我想要从中获取对象的表中没有外键的表中获取值?

javascript - node.js javascript mysql查询等到插入下一行

mysql - 从容器内连接到远程 mysql 数据库

PHP 和 SQL 登录 - "User Not Found"

python - 使用 sqlalchemy 的 MySQL 空间索引?

mysqldump压缩

mysql - 分组 SQL 结果

mysql - 如何通过运行批处理文件来启动 XAMPP MySQL?

php - Zend DB - 计数(*)不工作