Это было забавное решение в PostgreSQL для меня. Изучите мою DB Fiddle из этого:
SELECT "Order ID"
FROM enrollments
GROUP BY "Order ID"
HAVING ARRAY[1, 2, 3] <@ array_agg("Student ID")
Для неинформированных вышеупомянутый запрос в основном группируется на Order ID
и фильтрует только те, где массив (1, 2, 3)
содержится полностью во всех Student ID
s того же Ордена (Курса).
Это может быть переведено в SQLAlchemy (непроверено) в нечто вроде:
from sqlalchemy.dialects.postgresql import array, ARRAY, array_agg
session.query(Enrollments)
.with_entities(Enrollments["Order ID"])
.group_by(Enrollments["Order ID"])
.having(array_agg(
Enrollments["Student ID"],
type_=ARRAY(Integer)
)
.contains([1, 2, 3])
)
.all()