Запрос формы Django к подзапросу нескольких таблиц

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

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

Таблица работодателей
работодатель_id
работодатель_имя


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

id_отдела

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


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

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

id_отдела


Мой запрос должен возвращать имена всех сотрудников (имя_сотрудника), которые работают на работодателя с именем работодателя = "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 orm.

Спасибо.


person man utd    schedule 06.03.2020    source источник
comment
Я не эксперт по SQL, но я не могу представить, что использование вложенных запросов является хорошей идеей, когда достаточно простого JOIN. Что касается самого вопроса, см. здесь (я предполагаю, что ваши модели содержат соответствующие внешние ключи - вы не делитесь ими, поэтому...)   -  person Robin Zigmond    schedule 07.03.2020
comment
Да. Я согласен. Лучше всего было бы присоединиться. Но я просто пытался понять, как подзапрос будет работать для формы, и вложенные запросы казались лучшим способом показать поток.   -  person man utd    schedule 07.03.2020


Ответы (1)


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

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

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

Робин предложил следующее:

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

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

person schillingt    schedule 09.03.2020