Django在连接自己的同一个表时查询

时间:2013-03-13 22:07:03

标签: django orm self-join

我发现在我的工作中,我经常要自己加入同一张桌子,部分原因是因为我无法控制数据库设计,部分原因是因为大多数时候都需要很好的习惯。

Select distinct t.label, z.dupCount
    From optevents t
    Join
      (select label, Count(*) dupCount
          from optevents 
          group By label
          Having Count(*) > 1) z
    On z.label = t.label
    where t.campaignId = 100
    order By dupCount Desc

我很好奇如何将其转换为Django ORM查找?

模型定义非常简单,根本没有外键。

1 个答案:

答案 0 :(得分:3)

您应该可以通过混合annotatevalues

来实现这一目标
OptEvents \
    .objects \
    .filter(campaign__pk=100) \
    .values("label") \
    .annotate(dupCount=mod‌​els.Count("label")) \
    .order_by("dupCount")

Here's a good blog post on this by Daniel Roseman