我有以下型号:
class Volunteer(models.Model):
first_name = models.CharField(max_length=50L)
last_name = models.CharField(max_length=50L)
email = models.CharField(max_length=50L)
gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
class Department(models.Model):
name = models.CharField(max_length=50L, unique=True)
overseer = models.ForeignKey(Volunteer, blank=True, null=True)
location = models.CharField(max_length=100L, null=True)
class DepartmentVolunteer(models.Model):
volunteer = models.ForeignKey(Volunteer)
department = models.ForeignKey(Department)
assistant = models.BooleanField(default=False)
keyman = models.BooleanField(default=False)
captain = models.BooleanField(default=False)
location = models.CharField(max_length=100L, blank=True, null=True)
我想查询所有未分配志愿者的部门。我可以使用以下查询进行操作:
SELECT
vsp_department.name
FROM
vsp_department
LEFT JOIN vsp_departmentvolunteer ON vsp_department.id = vsp_departmentvolunteer.department_id
WHERE
vsp_departmentvolunteer.department_id IS NULL;
有没有一种更像django的方式做到这一点,还是我应该只使用原始sql?
您可以通过遵循查找中的向后关系来执行此操作。
>>> qs = Department.objects.filter(departmentvolunteer__isnull=True).values_list('name', flat=True)
>>> print(qs.query)
SELECT "app_department"."name" FROM "app_department" LEFT OUTER JOIN
"app_departmentvolunteer" ON ( "app_department"."id" = "app_departmentvolunteer"."department_id" )
WHERE "app_epartmentvolunteer"."id" IS NULL
以下是有关“跨多值关系”查询的文档:https :
//docs.djangoproject.com/en/stable/topics/db/queries/#spanning-multi-valued-
relationships
问题内容: 怪异的 (可能一点也不奇怪) 我有3个对象,即Employee,Rota和Department。 并不复杂,真的。Rota可以分配一个员工和/或部门,所有这些都使用Fluent进行配置。我所有的关联都是正确的(架构是完美的),但是我有一个奇怪的怪异之处。 当我执行并查看生成的SQL时,在Employee&Rota上有一个 LEFT OUTER JOIN 。为什么在那儿? 我不希望它这样
目前我有以下查询: 产出: 它可以工作,但在加入前限制注释表。结果是,它选择前5个注释并映射它。id为5的所有评论将被忽略。 谢谢
问题内容: 我有2个实体,和。它们是相关的,但是我不想将关系映射添加到bean。 我们如何 在 HQL或条件之间使用 左外部 联接 并 使用它们 ? 有一些解决方法, 按照此处所述使用本机SQL 。 添加关系并使用 从A选择a a左连接ab 。 我们可以在HQL中进行 内部 联接,例如从A a,B b中选择*,其中a.some = b.some 我一直回头看这两个选项,这还有其他选择吗?还是这不可
我有一个查询和一张表。查询“EmployeeTraining”包括员工姓名、参加的培训课程、参加的日期和有效期。我希望LeftJoin返回的是所有可用的培训课程,以及每个员工缺少的课程,因此在essense中,任何空值都是空的。 “应用培训”共有5项记录。一些员工只参加了4/5的课程,在“员工培训”记录中只有4项记录。left join不应该在“DateTake”和“Expiration”中使用空
问题内容: 这是我要显示用户历史记录的功能。为此,我需要显示用户的当前信用及其信用记录。 这就是我想要做的: 但是,我得到这个错误: [语法错误]第0行,列98:错误:预期的Doctrine \ ORM \ Query \ Lexer :: T_WITH,设置为“ ON” 编辑 :我在join子句中用“ WITH”替换了“ ON”,现在我看到的只是joined列中的1个值。 问题答案: 如果您在指
我使用的是LEFTJOIN,在某些情况下,没有正确的表匹配,因此用空(null)值替换正确的表列。因此,我得到了作为JSON聚合之一。 例如,Postgres 9.3创建输出 如何忽略/删除,以便在右表列为空时我有一个空的 JSON 数组 ?