Auswählen von Zeilen mit doppelten Feldwerten in Django
Betrachten Sie ein Django-Modell mit einem nicht eindeutigen Namensfeld, das doppelte Werte zulässt. Um alle Zeilen mit mindestens einem doppelten Wert des Namensfelds auszuwählen, kann man sowohl ORM- als auch SQL-Ansätze erkunden.
Django ORM-Ansatz
Unter Nutzung der Aggregationsfunktionen von Django, Diese Aufgabe kann man mit dem folgenden ORM-Ausdruck lösen:
from django.db.models import Count Literal.objects.values('name') .annotate(Count('id')) .order_by() .filter(id__count__gt=1)
Dieser Ausdruck gruppiert die Modellinstanzen nach Namen, zählt die Anzahl der Vorkommen jedes Namens und filtert die Ergebnisse, um nur Namen mit doppelten Instanzen einzuschließen.
Erweiterter Django-ORM-Ansatz
Während der vorherige ORM-Ansatz dies bereitstellt Die erforderliche Funktionalität gibt nur den Namen und die Anzahl zurück. Um die tatsächlichen Datensätze zu erhalten, kann man ein reguläres QuerySet basierend auf den gefundenen doppelten Namen erstellen:
dupes = Literal.objects.values('name') .annotate(Count('id')) .order_by() .filter(id__count__gt=1) Literal.objects.filter(name__in=[item['name'] for item in dupes])
SQL-Ansatz
Für diejenigen, die eine reine SQL-Lösung bevorzugen: Die folgende Abfrage würde die gewünschten Ergebnisse liefern:
select * from literal where name IN ( select name from literal group by name having count((name)) > 1 );
Diese Abfrage verwendet eine Unterabfrage, um die doppelten Namen zu finden, und wählt dann alle Zeilen aus aus Haupttabelle, in der der Name mit einem der Duplikate übereinstimmt.
Das obige ist der detaillierte Inhalt vonWie wähle ich Zeilen mit doppelten Feldwerten in Django mithilfe von ORM und SQL aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!