Heim >Datenbank >MySQL-Tutorial >Wie wähle ich Zeilen mit doppelten Feldwerten in Django mithilfe von ORM und SQL aus?

Wie wähle ich Zeilen mit doppelten Feldwerten in Django mithilfe von ORM und SQL aus?

DDD
DDDOriginal
2024-12-26 08:50:10814Durchsuche

How to Select Rows with Duplicate Field Values in Django Using ORM and SQL?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn