Выдача подзапроса в FROM в Django

Я пытаюсь создать SQL следующим образом:

SELECT ...
FROM bigtable
INNER JOIN (
   SELECT DISTINCT key
   FROM smalltable
   WHERE smalltable.x = 'user_input'
) subq ON bigtable.key = subq.key

Я попробовал несколько вещей с Django, и на данный момент у меня получилось:

subq = Smalltable.objects.filter(x='%s').values("key").distinct("key")
queryset = Bigtable.objects.extra(
    tables=[f"({subq.query}) subq"],
    where=["bigtable.key = smalltable.key"],
    params=["user_input"],
)

Целью здесь является перекрестное соединение bigtable и DISTINCT smalltable. Предложение ON затем заменяется условием в WHERE. Другими словами, действительное внутреннее соединение старой школы.

И у Django это почти получилось. Он производит SQL следующим образом:

SELECT ...
FROM bigtable, "(SELECT DISTINCT ...) subq"
WHERE (bigtable.key = subq.key)

Обратите внимание на двойные кавычки - Django ожидает табличный литерал только там и экранирует его как таковой. Как я могу выполнить этот запрос, таким или другим способом? Для меня важно, чтобы это было именно соединение, а не IN или EXISTS для целей планирования запроса.

Вернуться на верх