Django обычный запрос к нескольким таблицам подзапрос - PullRequest
0 голосов
/ 07 марта 2020

Я пытаюсь написать «сложный» подзапрос, используя django orm.

У меня есть таблицы ниже.

Таблица работодателей
идентификатор работодателя
имя_ работодателя


Таблица отделов

отдел_ид

идентификатор работодателя


Таблица сотрудников

имя сотрудника

отдел_ид


Мой запрос должен возвращать имена всех сотрудников (имя_ сотрудника), которые работают на работодателя, с Employer_name = "Google".

У меня есть приведенный ниже запрос sql, и он прекрасно работает:

  select * from Employee_Table where department_id in (
     select department_id from Department_Table where employer_id in (
       select employer_id FROM Employer_Table WHERE employer_name="GOOGLE" ) ) 

Я новичок в Django запросах orm и был бы признателен за некоторую помощь в понимании того, как это работает в django норм.

Спасибо.

1 Ответ

1 голос
/ 09 марта 2020

То, что вы ищете, выглядит примерно так:

employers = Employer.objects.filter(name='GOOGLE')
employees = Employee.objects.filter(department__employer__in=employers)

Я считаю, что это сгенерирует подзапрос, но, вероятно, не тот, который вы написали.

То, что предложил Робин было бы так:

employees = Employee.objects.filter(department__employer__name='GOOGLE')

Что, вероятно, будет более эффективным на уровне БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...