在数据库中查找特定字段的重复条目

Posted

技术标签:

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

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

我想找出nameschool 字段具有相同条目的行?

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)

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

【问题讨论】:

你有你要找的名字和学校,还是想得到所有的名字/学校组合? 我认为这里解决了***.com/questions/8989221/… 基本上你按名字或学校分组,然后检查 count > 1 【参考方案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。这将消除查询结果中的重复行。”当您转到我提到的链接时,这就是官方文档所说的 但这如何解决我想找出姓名和学校字段有相同条目的行的问题?

以上是关于在数据库中查找特定字段的重复条目的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Propel ORM 在数据库中查找重复条目?

MS Access 查询:合并特定字段列中具有相同数据的行

SQL在特定日期选择重复项

Django admin,多对多字段,多个重复条目

当表有八列时搜索数据库条目以查找匹配项

猫鼬 - 当所有字段都等于新条目时避免重复