Проблема n+1 в сложных запросах
У меня есть сложный запрос, предположим такой:
a = aliased(Advance)
w = aliased(Worker)
latest_advances_cte = (
select(
a.to_worker_id,
func.max(a.created_at).label("latest_created_at")
)
.filter_by(from_manager_profile_id=telegram_user_id)
.group_by(a.to_worker_id)
.cte("latest_advances")
)
la = aliased(latest_advances_cte)
detailed_latest_advances_cte = (
select(a)
.join(la, and_(
a.to_worker_id == la.c.to_worker_id,
a.created_at == la.c.latest_created_at
))
.cte("detailed_latest_advance")
)
dla = aliased(detailed_latest_advance_cte)
query = (
select(w, dla)
.join(dla, w.id == dla.c.to_worker_id)
)
как мне на выходе получить результат, который я получаю при использовании загрузки связанных объектов? То есть строка с воркером и списком его авансов, а не множество строк одинаковых воркеров и разных авансов для него. Заранее благодарю за помощь!