Maison > base de données > tutoriel mysql > Comment sélectionner des lignes avec des valeurs de champ en double dans Django à l'aide d'ORM et SQL ?

Comment sélectionner des lignes avec des valeurs de champ en double dans Django à l'aide d'ORM et SQL ?

DDD
Libérer: 2024-12-26 08:50:10
original
806 Les gens l'ont consulté

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

Sélection de lignes avec des valeurs de champ en double dans Django

Considérez un modèle Django avec un champ de nom non unique qui autorise les valeurs en double. Pour sélectionner toutes les lignes avec au moins une valeur en double du champ de nom, on peut explorer les approches ORM et SQL.

Approche ORM de Django

Utilisant les capacités d'agrégation de Django, on peut réaliser cette tâche avec l'expression ORM suivante :

from django.db.models import Count
Literal.objects.values('name')
               .annotate(Count('id')) 
               .order_by()
               .filter(id__count__gt=1)
Copier après la connexion

Cette expression regroupe les instances du modèle par nom, compte le nombre des occurrences de chaque nom et filtre les résultats pour inclure uniquement les noms avec des instances en double.

Approche ORM Django améliorée

Bien que l'approche ORM précédente fournisse les fonctionnalités nécessaires, il renvoie uniquement les informations de nom et de nombre. Pour obtenir les enregistrements réels, on peut construire un QuerySet régulier basé sur les noms en double trouvés :

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])
Copier après la connexion

Approche SQL

Pour ceux qui préfèrent une solution SQL pure, la requête suivante produirait les résultats souhaités :

select * from literal where name IN (
    select name from literal group by name having count((name)) > 1
);
Copier après la connexion

Cette requête utilise une sous-requête pour rechercher les noms en double, puis sélectionne toutes les lignes du table principale où le nom correspond à l'un des doublons.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal