Postgres sql与除关系除外相交

时间:2014-02-01 03:24:06

标签: django postgresql relational-division

我有一个名为groups的表。我想返回只有John和Mary参与的组号。

想想一个聊天应用程序,我想看看这两个现有的人是否已经只拥有一个组。

Group | user
1     | john
1     | mary
1     | dave
2     | john
2     | mary

我该怎么做?

这是实际模型

class Conversation(models.Model):
    attendee = models.ManyToManyField(User)
    guid = models.CharField(max_length=16)

1 个答案:

答案 0 :(得分:1)

asnwer基于@ arocks的方法,因为@ rocks的注释是错误的。

Conversation.objects.annotate(user_count=Count('attendee')).filter(user_count=2, attendee__username="john").filter(attendee__username="mary")

这将返回一个Conversation个对象的QuerySet,其中有2个成员,成员是 mary john

您必须单独filter的原因是,您的数据库管理系统需要创建临时子表,因为您需要使用相同的数据库列username两次进行过滤。您的数据