django - 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。我知道我可以LEFT JOIN
通过检查null
表 B 上是否存在字段来形成 a:
A.objects.filter(name='{}', b__isnull=True).values('id', 'name')
但我怎样才能LEFT JOIN
对我想要的特定子查询?
我尝试使用Subquery()
,但它似乎填充了最终WHERE
语句,并且没有在LEFT JOIN
.
解决方案
对于将来偶然发现此问题的任何人。LEFT JOIN
我直接联系了 Django irc 频道,并确认到目前为止,使用 Django ORM在子句中包含自定义子查询是不可能的。
推荐阅读
- javascript - 获取一个数组,其中包含数组内对象的所有键
- javascript - 使用 Lodash 在嵌套数组中查找属性以及其他操作
- python - 可以在运行时使 python 脚本转储其当前列表吗?
- python - 使用 Intel Pin 检测 Python 脚本
- php - 通过jquery访问api
- keras - 如何在具有不同时间步长的编码器和解码器的 keras 中为 Seq2Seq 添加自定义注意层
- spring-boot - Springboot 2.0/Camel/Active MQ 用 ActiveMQComponent / ActiveMQConnectionFactory 抛出异常
- java - Core JAVA:循环整个程序,基于用户输入
- jquery - 无法使用 Jquery 发布 nodeJS 应用程序
- amazon-web-services - aws 代码管道