ホームページ >データベース >mysql チュートリアル >Django ORM を使用して重複フィールド値を持つ行を検索する方法

Django ORM を使用して重複フィールド値を持つ行を検索する方法

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-05 08:42:41759ブラウズ

How to Find Rows with Duplicate Field Values Using Django ORM?

重複フィールド値を持つ行に対する Django クエリ

一意でないフィールドを持つ Django モデルがあるとします。そのフィールドに重複する値が少なくとも 1 つあるすべての行をモデルから選択する必要があります。

プレーン SQL アプローチ

考えられる解決策の 1 つは、プレーン SQL を使用することです。

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

Django ORMアプローチ

Django の ORM を使用すると、values()、annotate()、order_by()、filter() の組み合わせで同じ結果を達成できます:

from django.db.models import Count

dupes = Literal.objects.values('name') \
                    .annotate(Count('id')) \
                    .order_by() \
                    .filter(id__count__gt=1)

上記のコードは ValuesQuerySet を返すため、それを通常の QuerySet に変換してクエリセットとして使用する必要があります。 filter:

duplicates = Literal.objects.filter(name__in=[item['name'] for item in dupes])

このアプローチにより、重複する名前値を持つ行のみが選択されます。

以上がDjango ORM を使用して重複フィールド値を持つ行を検索する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。