2010-06-13 8 views
0

J'ai besoin d'extraire tous les enregistrements qui ont un champ qui n'a pas de valeur unique.Comment trouver tous les enregistrements qui partagent la même valeur de champ qu'un autre enregistrement?

Je ne peux pas trouver une manière élégante de le faire - en utilisant l'annotation ou d'une autre manière. Je vois une méthode "value_annotate" pour le gestionnaire d'objets mais il n'est pas clair si c'est du tout lié.

Actuellement, je suis en utilisant la manière inélégante de simples boucle à travers toutes les valeurs et de faire une obtenir sur la valeur, et s'il y a une exception, cela signifie qu'il est pas unique ..

Merci

Répondre

0

je peux » t beaucoup parlé de la part de Django, mais la requête ressemblerait à quelque chose comme:

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

Cela renverra tous les enregistrements où le champ « bar » est unique.

0

J'irais directement à une requête brute dans ce cas. Ça va ressembler à quelque chose comme ce qui suit, en supposant que vous utilisez Django 1.2:

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

Pour plus tôt que 1.2, voir the django docs on raw queries