【发布时间】:2020-01-15 04:08:10
【问题描述】:
假设我有一个包含 2 列的表,其中包含 Order ID 和 Student ID:
Order ID | Student ID |
-----------------------
1 | 1
1 | 2
1 | 3
2 | 1
2 | 3
3 | 1
3 | 2
4 | 1
4 | 2
4 | 3
5 | 2
5 | 3
.....
这里是多对多的关系:一门课程可以包含多个学生,一个学生可以注册多个课程。
问题是:我想过滤包含特定学生 ID 集的课程。例如:
如果学生 ID 集为
(1,2,3),则返回的课程 ID 应为(1,4),因为只有这 2 门课程让该集中的所有学生都注册了。如果学生ID设置为
(1,2),则返回的课程ID应为(1,3,4)。如果学生ID设置为
(2,3),那么结果应该是(1,4,5)。
等等
学生 ID 集的大小可以根据 Python 中的集的限制而变化。
目前,我正在查询特定课程并将对象存储到特定列表中,然后使用 Python 进行过滤。但是,从上表中多次查询数千个项目只是很慢。
【问题讨论】:
-
您使用的是什么数据库?这看起来很像集合逻辑。
-
@SunnyPatel 这是 PostGres,我更喜欢在使用实际 SQL 之前在 SqlAlchemy 中进行。为了测试,我使用内存中的 SqlLite,它很快,但是当使用 PostGres 实际部署在 AWS 云上时,速度慢得让人无法接受,现在我正在修复它。
-
我有 DB 优先的心态,以确保我的解决方案可以使用干净的 SQL 代码,因为有时将其转换为 ORM 语言可能会稀释它。所以我为你提供了一个基于数据库的解决方案。希望对您有所帮助!
标签: python sqlalchemy