Django如何在LEFT JOIN中传递子查询

3

我有三个模型(A、B、C):

class A(models.Model):

url = models.URLField()
uuid = models.UUIDField()
name = models.CharField(max_length=400)
id = models.IntegerField()

class B(models.Model):

user = models.ForeignKey(C, to_field='user_id',
                         on_delete=models.PROTECT,)
uuid = models.ForeignKey(A, to_field='uuid',
                         on_delete=models.PROTECT,)

我希望使用Django ORM执行以下SQL查询:

SELECT A.id, COUNT(A.id), COUNT(foo.user)

FROM A

LEFT JOIN (SELECT uuid, user FROM B where user = '<a_specific_user_id>') as foo
  ON A.uuid = foo.uuid_id 
  
WHERE name = '{}'

GROUP by 1

HAVING COUNT(A.id)> 1 AND COUNT(A.id)>COUNT(foo.user)

我的问题主要是关于LEFT JOIN。我知道可以通过检查表B上的null字段来形成一个LEFT JOIN:
A.objects.filter(name='{}', b__isnull=True).values('id', 'name')

但是我该如何在特定的子查询上使用LEFT JOIN

我尝试使用Subquery(),但它似乎只会填充最终的WHERE语句,并没有将我的自定义子查询传递到LEFT JOIN中。

1个回答

3

如果未来有人看到这篇文章,请注意。我直接联系了Django irc频道,确认目前无法在Django ORM中使用自定义子查询来包含LEFT JOIN子句。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接