【问题标题】:Django query join with another query on the same tableDjango 查询与同一张表上的另一个查询连接
【发布时间】:2017-11-09 20:42:39
【问题描述】:

我有一个这样的模型:

class mymodel(models.Model):
    user1 = models.CharField(max_length=255, null=True, blank=True)
    user2 = models.CharField(max_length=255, null=True, blank=True)
    paid = models.FloatField(default=0)
    reason = models.CharField(max_length=150, choices=REASON_NAMES, null=True, blank=True)

我有两个这样的查询:

users_trx1 = mymodel.objects.values('user1').annotate(r1_c=Count(
            Case(
                When(reason='REASON1', then=1),
                output_field=IntegerField()
            )
        )).annotate(r2_c=Count(
            Case(
                When(reason='REASON2', then=1),
                output_field=IntegerField()
            )
        )).order_by('user1')

第二个查询得到支付给 user2 的总和:

users_trx2 = mymodel.objects.values('user2').annotate(r1_s=Sum(
            Case(
                When(reason='REASON1', then='paid'),
                default=0.0,
                output_field=FloatField()
            )
        )).annotate(r2_s=Sum(
            Case(
                When(reason='REASON2', then='paid'),
                default=0.0,
                output_field=FloatField()
            )
        )).order_by('user2')

现在我需要一种方法来左连接这两个查询。意思是,我需要一个新的查询来让我进入每一行:(user1, r1_c, r1_s, r2_c, r2_s)。
我需要连接以从 users_trx2 查询中获取与 user1 匹配的 user2 值来自 users_trx1 查询。

我正在使用带有 mysql 后端的 Django 1.11

【问题讨论】:

    标签: mysql django join


    【解决方案1】:

    经过大量搜索,我认为 Django ORM 不支持如此复杂的查询,所以我最后使用原始 SQL 来获得结果。

    【讨论】:

      猜你喜欢
      • 2013-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-10
      • 2019-04-04
      • 1970-01-01
      • 2014-08-17
      • 1970-01-01
      相关资源
      最近更新 更多