【问题标题】:Django orm query to multiple tables subqueryDjango orm查询到多个表子查询
【发布时间】:2020-03-06 21:20:10
【问题描述】:

我正在尝试使用 django orm 编写一个“复杂”的子查询。

我有下表。

雇主表
雇主ID
雇主名称


部门表

部门编号

employer_id


员工表

员工姓名

部门编号


我的查询应该返回为雇主工作的所有雇员的姓名 (employee_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 orm 中的工作原理。

谢谢。

【问题讨论】:

  • 我不是 SQL 专家,但我无法想象在简单的 JOIN 就足够的情况下使用嵌套查询是个好主意。至于问题本身,请参阅here(我假设您的模型包含相关的外键 - 您不共享这些...)
  • 是的。我同意。最好是加入。但我只是想了解子查询如何为 orm 工作,而嵌套查询感觉像是显示流程的更好方式。

标签: python django-models subquery django-orm


【解决方案1】:

你正在寻找的是这样的:

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

我相信这会生成一个子查询,但可能不是你写的那个。

Robin 的建议是这样的:

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

这可能在 db 级别更有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-26
    • 2014-05-19
    • 2022-01-21
    • 2018-06-10
    • 2020-12-03
    • 2021-11-15
    • 1970-01-01
    相关资源
    最近更新 更多