如何查找与其他记录共享相同字段值的所有记录?

时间:2010-06-13 01:40:04

标签: sql django django-queryset

我需要提取所有具有不具有唯一值的字段的记录。

我无法找到一种优雅的方式 - 使用注释或其他方式。我向对象管理器看到了一个“value_annotate”方法,但目前还不清楚它是否完全相关。

目前,我正在使用简单循环遍历所有值的不优雅方式并获取值,如果存在异常,则表示它不是唯一的..

由于

2 个答案:

答案 0 :(得分:0)

我不能多说Django部分,但查询看起来像:

SELECT * 
FROM foo
WHERE id IN (
  SELECT MAX(id) 
  FROM foo 
  GROUP BY bar 
  HAVING COUNT(*)=1)

这将返回“bar”字段唯一的所有记录。

答案 1 :(得分:0)

在这种情况下,我会直接转到原始查询。假设您正在使用Django 1.2,这将看起来像下面这样:

query = """
SELECT *
FROM table
GROUP BY field
HAVING COUNT(*) > 1
"""
non_uniques = Table.objects.raw(query)

如果早于1.2,请参阅the django docs on raw queries