Maison >base de données >tutoriel mysql >Comment sélectionner des lignes avec des valeurs de champ en double dans Django ?

Comment sélectionner des lignes avec des valeurs de champ en double dans Django ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-04 11:09:35702parcourir

How to Select Rows with Duplicate Field Values in Django?

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

Pour sélectionner toutes les lignes d'un modèle qui ont au moins une valeur en double pour un champ donné , vous pouvez utiliser une combinaison de l'agrégation et du filtrage de Django capacités :

  1. Valeurs agrégées : Utilisez la méthode annotate() pour calculer le nombre de valeurs en double pour le champ spécifié. Par exemple, pour un modèle avec un champ de nom :
from django.db.models import Count
dupes = Literal.objects.values('name').annotate(id_count=Count('id'))
  1. Filtre basé sur le nombre : Utilisez la méthode filter() pour sélectionner les lignes où le nombre dépasse 1. Cela renverra un ValuesQuerySet contenant le dupliqué valeurs :
dupes = dupes.filter(id_count__gt=1)
  1. Récupérer les enregistrements complets : Pour obtenir les enregistrements complets, utilisez le filtre in pour sélectionner les lignes où le champ de nom correspond aux valeurs dupliquées :
dupes = Literal.objects.filter(name__in=[item['name'] for item in dupes])

Solution SQL alternative :

Si préféré, vous pouvez également utiliser une sous-requête pour obtenir le même résultat :

SELECT *
FROM literal
WHERE name IN (
    SELECT name
    FROM literal
    GROUP BY name
    HAVING COUNT(*) > 1
);

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!

Déclaration:
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