LEFT JOIN на двух кверисетах Django
Я уже два дня ищу в SO и Google и не нашел решения своей конкретной проблемы. У меня есть SQL запрос, который я пытаюсь преобразовать в Django ORM (если это вообще возможно). В SQL запрос выглядит примерно так:
SELECT *
FROM(
SELECT
max(effective_date) AS effective_date,
floorplan_id
FROM
floorplan_counts
GROUP BY
floorplan_id) s1
LEFT JOIN (
SELECT
floorplan_id AS fc_floorplan_id,
units AS fc_units,
beds AS fc_beds,
expirations AS fc_expirations,
effective_date
FROM
floorplan_counts) s2 ON s1.floorplan_id = s2.fc_floorplan_id
)
Я могу использовать Django ORM для создания подзапросов s1 и s2:
s1 = FloorplanCount.objects.values('floorplan_id').annotate(effective_date=Max('effective_date')
s2 = FloorplanCount.objects.values('effective_date').annotate(
fc_floorplan_id=F('floorplan_id'), fc_units=F('units'), fc_beds=F('beds'), fc_expirations=F('expirations'))
В настоящее время я использую Django .raw(), но хотел бы использовать Django ORM. Также хотелось бы не использовать .extra(), поскольку в документации сказано, что в будущем она будет устаревшей.
Как я могу левым способом присоединить s1 к s2?
Я не знаю вашу модель, но я не понимаю, зачем вам нужен второй select:
queryset = FloorplanCount.objects.annotate(
effective_date=Max('effective_date'),
fc_floorplan_id=F('floorplan_id'),
fc_units=F('units'),
fc_beds=F('beds'),
fc_expirations=F('expirations')
)