首页 >数据库 >mysql教程 >如何在 Django 中选择具有重复字段值的行?

如何在 Django 中选择具有重复字段值的行?

Susan Sarandon
Susan Sarandon原创
2025-01-04 11:09:35753浏览

How to Select Rows with Duplicate Field Values in Django?

在 Django 中选择具有重复字段值的行

从模型中选择给定字段至少有一个重复值的所有行,可以结合使用Django的聚合和过滤功能:

  1. 聚合值: 使用 annotate() 方法计算指定字段的重复值计数。例如,对于具有名称字段的模型:
from django.db.models import Count
dupes = Literal.objects.values('name').annotate(id_count=Count('id'))
  1. 根据计数过滤: 使用filter()方法选择计数超过的行1. 这将返回一个包含重复项的 ValuesQuerySet值:
dupes = dupes.filter(id_count__gt=1)
  1. 获取完整记录:要获取完整记录,请使用 in 过滤器选择名称字段与重复值匹配的行:
dupes = Literal.objects.filter(name__in=[item['name'] for item in dupes])

替代 SQL解决方案:

如果愿意,您还可以使用子查询来获得相同的结果:

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

以上是如何在 Django 中选择具有重复字段值的行?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn