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

ORM と SQL を使用して Django で重複したフィールド値を持つ行を選択する方法

DDD
DDDオリジナル
2024-12-26 08:50:10814ブラウズ

How to Select Rows with Duplicate Field Values in Django Using ORM and SQL?

Django で重複フィールド値を持つ行を選択する

重複値を許可する、一意でない名前フィールドを持つ Django モデルを考えてみましょう。 name フィールドの重複値が少なくとも 1 つあるすべての行を選択するには、ORM と SQL の両方のアプローチを検討できます。

Django ORM アプローチ

Django の集計機能を利用し、このタスクは、次の ORM 式を使用して実行できます:

from django.db.models import Count
Literal.objects.values('name')
               .annotate(Count('id')) 
               .order_by()
               .filter(id__count__gt=1)

この式はモデルをグループ化します。インスタンスを名前で検索し、各名前の出現数をカウントし、結果をフィルタリングして、重複するインスタンスを持つ名前のみを含めます。

強化された Django ORM アプローチ

以前のORM アプローチは必要な機能を提供し、名前と数の情報のみを返します。実際のレコードを取得するには、見つかった重複名に基づいて通常の QuerySet を構築します。

dupes = Literal.objects.values('name')
                       .annotate(Count('id'))
                       .order_by()
                       .filter(id__count__gt=1)
Literal.objects.filter(name__in=[item['name'] for item in dupes])

SQL アプローチ

純粋な SQL ソリューションを好む場合は、次のクエリでは望ましい結果が得られます:

select * from literal where name IN (
    select name from literal group by name having count((name)) > 1
);

このクエリはサブクエリを利用して重複した名前を検索し、名前が重複の 1 つと一致するメインテーブルからすべての行を選択します。

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

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