【问题标题】:Find duplicate entries in database for specific fields在数据库中查找特定字段的重复条目
【发布时间】:2014-07-17 12:29:20
【问题描述】:

我的模型具有姓名、学校、电子邮件、地址等字段。

我想找出name 和school 字段具有相同条目的行?

eg:
name school email 
abc     mps    abc@gmail.com
abc     mps    abc@gmail.com
xyz     vps    xyz@gmail.com
abc     mps    abc@gmail.com
poi     vps    poi@gmail.com
jkl     vps    jkl@gmail.com

name abc 和 school mps 有 3 个条目,xyz 和 vps 有 2 个条目 我可以嵌套for 循环和迭代方式来检查表中所有行的姓名和学校字段。那将是性能损失 (n*n)

还有其他方法可以查到吗?

【问题讨论】:

  • 你有你要找的名字和学校,还是想得到所有的名字/学校组合?
  • 我认为这里解决了stackoverflow.com/questions/8989221/… 基本上你按名字或学校分组,然后检查 count > 1

标签: django


【解决方案1】:

我不确定我是否理解您,您只想获得具有 SAME 姓名和学校的结果,或者只想获得 ONE 结果姓名和学校?

这句话将返回 ALL 名为“abc”和学校“mps”的学校

result_list = model.objects.filter(name='abc').filter(school='mps')


如果您试图为每个名称和学校仅获得 ONE 个结果,则必须使用 distinct() 喜欢:

result_list = model.objects.filter(name='abc').filter(school='mps').distinct()`


【讨论】:

    【解决方案2】:

    distinct() 将达到目的。 以下将解决您的问题

    model_name.objects.values_list('name').distinct()
    

    如果你想要字典,那么你必须这样做

    model_name.objects.values('name').distinct()
    

    希望能解决你的问题!!

    【讨论】:

    • @FrEaKmAn “返回一个在其 SQL 查询中使用 SELECT DISTINCT 的新 QuerySet。这将消除查询结果中的重复行。”当您转到我提到的链接时,这就是官方文档所说的
    • 但这如何解决我想找出姓名和学校字段有相同条目的行的问题?
    猜你喜欢
    • 2010-09-30
    • 2011-08-14
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-02
    • 2021-12-27
    相关资源
    最近更新 更多