/ / Postgres sql sa pretínajú s okrem relačného delenia - django, postgresql, relačného delenia

Postgres sql pretínajú okrem relačného rozdelenia - django, postgresql, relational-division

Mám tabuľku s názvom skupiny. Chcem vrátiť číslo skupiny, ktorej súčasťou sú iba John a Mary.

Popremýšľajte o aplikácii na rozhovor, chcem zistiť, či títo dvaja existujúci ľudia už majú skupinu iba IBA s nimi.

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

Ako to môžem urobiť?

Tu je skutočný model

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

odpovede:

1 pre odpoveď č. 1

Odpoveď založená na prístupe @arocks, pretože anotácia @rocks je nesprávna.

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

To vám vráti sadu dotazov Conversation objekty, ktoré majú 2 členov a členov sú mary a john

Dôvod, prečo musíte byť 2 samostatné filter to znamená, že váš systém na správu databáz musí vytvárať dočasné podtabuľky, pretože musíte použiť rovnaký databázový stĺpec username dvakrát na filtrovanie. Vaše údaje