ホームページ >データベース >mysql チュートリアル >ORM と SQL を使用して Django で重複したフィールド値を持つ行を選択する方法
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 サイトの他の関連記事を参照してください。